我正在尝试在pubsub机制上实现MUC,因此对于每个MUC组,我将邀请发送给多个人。在MUC的invitationReceivedListener中,我获得了pubsub节点和addItemEventListener。现在,当我向组内发送消息时,我将项目发布到pubsub节点,它在另一端发送(我可以从下面显示ejabberd日志),但不调用ItemEventListener。
为什么我的itemEventListener没有被调用? 我注意到的另一件事是,在ejabberd日志示例下,每次接收器登录都会继续循环。所以它似乎继续多次向接收者发送相同的消息。
//Subscribing to node
multiUserChatManager.addInvitationListener(new InvitationListener() {
@Override
public void invitationReceived(XMPPConnection connection_,
MultiUserChat muc, String invitor, String reason, String password,Message msg) {
try {
System.out.println("in invitation Recieved----------------");
//Subscribe to node
LeafNode node=(LeafNode)pubSubMgr.getNode(parseName(muc.getRoom()));
addMessageListenerToPubSubNode(node);
node.subscribe(username+"@abc.mydomain.com");
System.out.println("Subscribing to node "+node.getId());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//Declaration of event Listener
private void addMessageListenerToPubSubNode(LeafNode node) {
node.addItemEventListener(new ItemEventListener(){
@Override
public void handlePublishedItems(ItemPublishEvent itemEvents) {
List<PayloadItem> item = itemEvents.getItems();
System.out.println("^^^^^^^^^^^^^^Received Item thru pubsub Item="+item.toString());
for(PayloadItem i:item)
{
System.out.println("message in the item on pubsub="+i.toXML());
}
}
}
);
}
我可以在我的ejabberd日志中看到以下消息,但是在收件人端没有调用ItemEventListener(+999999是我的接收者而+888888是我的发送者)。
2015-11-03 20:51:18.795 [debug] <0.2230.0>@ejabberd_c2s:send_text:1892 Send XML on stream =
<<"<message from='pubsub.abc.mydomain.com' to='+999999@abc.mydomain.com' type='headline'>
<event xmlns='http://jabber.org/protocol/pubsub#event'><items type='headline' node='03aa73745fa14e30bd72f66c9861f528'>
<item id='5A689B43B9777'><x xmlns='jabber:x:oob'>
<file1url>1446564035727125000.jpeg</file1url>
<postuuid>5522fbbc-5c4d-46af-bc65-b0a4b5777cdc</postuuid>
</x></item></items>
</event>
<delay xmlns='urn:xmpp:delay' from='+888888@abc.mydomain.com/+888888' stamp='2015-11-03T15:20:35Z'>
</delay>
</message>">>
答案 0 :(得分:1)
实际上我找到了解决方案 问题是,每次应用程序打开时我都没有添加监听器。每次打开应用程序时我都需要addeventlistener。这解决了不接收消息的问题