Включить управление потоками asmack android

Я столкнулся с проблемой использования управления потоком XEP-0198.

В принципе, я хочу включить это для проблемы с отправкой сообщений на Android, когда Интернет случайно отключается, а сервер все еще имеет присутствие в Интернете в Интернете.

Чтобы решить эту проблему, я хочу использовать XEP-0198, который использует процесс запроса и подтверждения. Вы можете найти больше здесь .

В основном я использую sm: 3 для этого. Проблема в том, что когда я устанавливаю

XMPPConnection.DEBUG_ENABLED=true; 

Я получаю sm: 3 в журнале, который является внутренним для asmack, но я не могу получить это, добавив какой-либо пакетный список через соединение.

Это то, что внутри отладки отладки asmack:

 <r xmlns='urn:xmpp:sm:3'/><message from='test1@pinmessage.com/Smack' to='test1@pinmessage.com' id='CQUe6-5'><received xmlns='urn:xmpp:receipts' id='CQUe6-4'/></message><r xmlns='urn:xmpp:sm:3'/> 

Это то, что я получаю от packageFilter:

 <message id="CQUe6-5" to="test1@pinmessage.com" from="test1@pinmessage.com/Smack"><received xmlns='urn:xmpp:receipts' id='CQUe6-4'/></message> 

Я попытался настроить фильтр пакетов, просмотрев код чата и yaxim, но я не понимаю, как я могу получить этот <r xmlns='urn:xmpp:sm:3'/> в моем коде, чтобы я мог Вернуть количество пакетов, полученных до сих пор на сервер, чтобы сервер мог отправить мне любой недостающий пакет.

Для этого я также настроил диспетчер провайдеров, добавив следующий код:

  addSimplePacketExtension("sm", URN_SM_3); addSimplePacketExtension("r", URN_SM_3); addSimplePacketExtension("a", URN_SM_3); addSimplePacketExtension("enabled", URN_SM_3); addSimplePacketExtension("resumed", URN_SM_3); addSimplePacketExtension("failed", URN_SM_3); private static final String URN_SM_3 = "urn:xmpp:sm:3"; private static void addSimplePacketExtension(final String name, final String namespace) { Log.e("adding simple packet extension", namespace+"---"+name); ProviderManager.getInstance().addExtensionProvider(name, namespace, new PacketExtensionProvider() { public PacketExtension parseExtension(XmlPullParser parser) throws Exception { StreamHandlingPacket packet = new StreamHandlingPacket(name, namespace); Log.e("Stream ahndling packet ","------>"+packet.toXML()); int attributeCount = parser.getAttributeCount(); for (int i = 0 ; i < attributeCount ; i++) { packet.addAttribute(parser.getAttributeName(i), parser.getAttributeValue(i)); } return (PacketExtension) packet; } }); } static class StreamHandlingPacket extends Packet { private String name; private String namespace; Map<String, String> attributes; StreamHandlingPacket(String name, String namespace) { this.name = name; this.namespace = namespace; attributes = Collections.emptyMap(); } public void addAttribute(String name, String value) { if (attributes == Collections.EMPTY_MAP) attributes = new HashMap<String, String>(); attributes.put(name, value); } public String getAttribute(String name) { return attributes.get(name); } public String getNamespace() { return namespace; } public String getElementName() { return name; } public String toXML() { StringBuilder buf = new StringBuilder(); buf.append("<").append(getElementName()); // TODO Xmlns?? if (getNamespace() != null) { buf.append(" xmlns=\"").append(getNamespace()).append("\""); } for (String key : attributes.keySet()) { buf.append(" ").append(key).append("=\"").append(StringUtils.escapeForXML(attributes.get(key))).append("\""); } buf.append("/>"); Log.e("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&","&&&&&&&&&&&&&&&&&&&&&&&&&&&&=>"+buf.toString()); return buf.toString(); } } 

В основном я получаю эту идею, видя безопасную реализацию чата, но она расширяет UnkownPacket, а не Packet. Я получил помощь отсюда .

Я также видел ветку git asmack, как это, но не смог понять, как ее реализовать.

Пожалуйста, помогите, если вы каким-либо образом внедрили его в любую библиотеку, такую ​​как защищенный чат, yaxim или любой другой клиент XMPP для Android.

Solutions Collecting From Web of "Включить управление потоками asmack android"

Я рекомендую использовать Smack 4.1, который работает на Android и поддерживает XEP-198 Stream Management.

Я не могу предложить вам решение, потому что у меня есть аналогичная проблема, но я могу сказать вам из второй ссылки, что UnknownPacket расширяет пакет и реализует пакет PacketExtension , поэтому вам нужно было передать ваш StreamHandlingPacket в (PacketExtension) в оператор возврата Ваш метод parseExtension.

Можете ли вы поймать <enabled xmlns='urn:xmpp:sm:3' etc> Xml, который возвращается сервером XMPP, когда вы отправляете <enable xmlns='urn:xmpp:sm:3' etc> ? Если это так, это будет началом для вашей проблемы.

Дайте нам знать, как это происходит!

Здесь можно найти исправленную утилиту asmack yaxim (создатель был достаточно любезен, чтобы направить меня на него, спасибо Ge0rG!):

https://github.com/pfleidi/yaxim/tree/master/libs

Обязательно получите либид.