启用流管理asmack机器人 [英] Enable Stream Management asmack android

查看:193
本文介绍了启用流管理asmack机器人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我现在面临使用XEP-0198流管理问题。

I am facing an issue with using XEP-0198 stream management.

基本上,我想启用此消息对Android的下降问题,当互联网disconect随机和服务器仍然有客户端presence网上。

Basically, I want to enable this for message dropping issue on Android when internet disconect randomly and server still has client presence online.

要解决这个问题,我想用XEP-0198,它使用的要求和确认过程。 你可以找到更多这里

To solve this issue I want to use XEP-0198 which uses request and acknowledgement process. You can find more here.

基本上我用SM:3这一点。问题是,当我设置

Basically I am using sm:3 for this. The problem is that when I set

XMPPConnection.DEBUG_ENABLED=true;

我得到SM:在日志是内部asmack 3,但我无法得到通过ading任何packetListner通过连接

I get sm:3 in log which is internal to asmack but I am unable to get that by ading any packetListner over connection.

这是什么asmack调试打印里面:

This is what inside asmack debug prints:

<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'/>

这是我从packetFilter得到:

This is what I get from packetFilter:

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

我通过看聊天安全的code受审自定义数据包过滤器和yaxim,以及,但我没有得到我怎么能得到这个&LT; R的xmlns =瓮:XMPP协议: SM:3/&GT; 在我的code,这样我可以返回数据包的数量接收,直到我们的服务器,使服务器可以把我送回任何丢失包

I had tried for custom packet filter by seeing the code of chat secure and yaxim as well but I am not getting how can I get this <r xmlns='urn:xmpp:sm:3'/> in my code so that I can return the number of packets received untill now to server so that server can send me back any missing packet.

我还通过添加以下code配置提供者管理的内容:

I had also configured provider manager for this by adding the code below:

        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而不是包。我从<一个采取帮助href="https://github.com/devrandom/ChatSecureAndroid/blob/29eee9915500f1f32a2d6512a9b759124564a4f8/src/info/guardianproject/otr/app/im/plugin/xmpp/XmppStreamHandler.java"相对=nofollow>这里。

我也看到 asmack这样的一个Git分支,但未能了解如何实现它。

I have also seen a git branch of asmack like this but wasn't able to understand how to implement it.

请帮助,如果你已经实现了它以任何方式与喜欢聊天安全,yaxim或任何其他Android XMPP客户端的所有库。

Please help if you have implemented it in any way with any library like chat secure, yaxim or any other android XMPP client.

推荐答案

我推荐使用啪4.1,运行在Android 支持XEP-198流管理。

I recommend using Smack 4.1, which runs on Android and supports XEP-198 Stream Management.

这篇关于启用流管理asmack机器人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆