在 aSmack 中启用 XEP-0198
Posted
技术标签:
【中文标题】在 aSmack 中启用 XEP-0198【英文标题】:Enabling XEP-0198 in aSmack 【发布时间】:2014-04-22 12:12:54 【问题描述】:我目前正在对启用了 XEP-0198 的 XMPP 服务器使用 asmack。
我正在尝试从 asmack 库中启用此功能,但我找不到任何有关如何执行此操作的信息,因此请关注 http://xmpp.org/extensions/xep-0198.html 我知道我必须通过发送来启用此功能:
<enable xmlns='urn:xmpp:sm:3'/>
但我不知道该怎么做,因为这不是一个节。任何帮助表示赞赏。
编辑: 正如 dant3 指出的那样,Smack 不支持 XEP-0198,但我仍然想通过 Smack 发送那个简单的 XML 来启用它,我只是不知道该怎么做。
【问题讨论】:
【参考方案1】:看起来像 do not have XEP-0198 implementation。所以,你不能启用它。
如果您将它贡献给 smack(因此 - 用于 asmack),那就太好了。
编辑:
Smack 4.1.0 现在支持 XEP-0198 流管理。有关详细信息,请参阅此wiki page。
【讨论】:
感谢现实检查。即使它不受支持,也必须有一种方法可以发送该 XML 以有效地启用它,对吧? 是的,但我看不出它如何帮助您实施 XEP-0198。用 smack 解析这样的节将需要你按照现在的方式进行分叉。 Smack 4.1.0 现在支持 XEP-0198 流管理。 github.com/igniterealtime/Smack/wiki/… 感谢分享。我相应地更新了帖子。【参考方案2】:我通过创建自己的包类型解决了这个问题:
public class MyPacket extends Packet
private String content = "";
public MyPacket(String content)
this.content = content;
@Override
public String toXML()
return this.content;
我在构造函数中传递 xml,然后关闭它:
MyPacket p = new MyPacket("<enable xmlns='urn:xmpp:sm:3'/>");
this.connection.sendPacket(p);
绝对不是世界上最好的代码,但它确实有效。
【讨论】:
我认为这不足以实际使用 XEP-0198 的功能。 事实并非如此,我实际上发现除非我修改核心库,否则无法绕过 smack 使用 XEP-0198。我能够像这样启用它! 你还有什么发现吗?以上是关于在 aSmack 中启用 XEP-0198的主要内容,如果未能解决你的问题,请参考以下文章
XMPP协议扩展:XEP-0198 流管理(Stream Management)中文翻译(个人整理,难免有翻译错的地方,请多多指正)