Smack阅读旧事件

时间:2010-09-21 20:15:01

标签: java openfire smack

我遇到使用Smack 3.1和运行openfire的服务器的应用程序的问题。启动应用程序后,它将读取节点上的最后一条消息。这不起作用,因为消息被解析,处理并放入db。除了在有效载荷中发送消息创建时间外,还有什么方法可以阻止这种重复吗? (实际上,如果有信号表明消息已被“消费”,那将是非常棒的)

1 个答案:

答案 0 :(得分:1)

如果您指的是pubsub,那么您可以配置节点,使其不会保留persist_itemsmax_items的项目。

如果您无法控制节点创建,那么您可以做的是检查数据包中的延迟命名空间(jabber:x:delay和/或urn:xmpp:delay

public void processPacket(Packet pkt) {
   DelayInformation delay = (DelayInformation)pkg.getExtension("x", "jabber:x:delay");
   if (delay != null)
      return; //Discard this packet
   delay = (DelayInformation)pkg.getExtension("x", "urn:xmpp:delay");
   if (delay != null)
      return; //Discard this as well
   //Otherwise this is a good packet
   ...
}

您还可以通过检查DelayInformation对象的长度,原因等来做出决定。

如果是PEP那么你将总是得到最后一个项目,我认为没有办法确定它是否被延迟了。数据包中没有延迟信息。

您需要获得nightly buildsbuild your own以获得pubsub支持。我不认为当前版本Smack 3.1.0是supoorts pubsub。