在XMPP多用户会议室中收到重复的消息

时间:2014-08-27 05:44:06

标签: xmpp smack muc

当device1将消息发送到会议室" del@conference.jabber.org" 消息显示在聊天列表中,同时还显示由会议室发送的重复消息" del@conference.jabber.org"。我被困了,为什么我会收到重复的消息。

public void setConnection(XMPPConnection connection) {
    this.connection = connection;
    if (connection != null) {
      PacketFilter filter = new MessageTypeFilter(Message.Type.groupchat);
      connection.addPacketListener(new PacketListener() {
        @Override
        public void processPacket(Packet packet) {
          Message message = (Message) packet;
          if (message.getBody() != null) {
            String fromName = StringUtils.parseBareAddress(message.getFrom());
            String[] parts = fromName.split("@");
            String from = parts[0].trim();
            messages.add(from + ":");
            messages.add(message.getBody());
            // Add the incoming message to the list view
            mHandler.post(new Runnable() {
              public void run() {
                setListAdapter();
              }
            });
          }
        }
      }, filter);
    }
  }

按钮点击发送消息,如下所示

Button send = (Button) this.findViewById(R.id.sendBtn);
            send.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    Message mg = muc.createMessage();
                    String text = textMessage.getText().toString();       
                    mg.setBody(text);
                    Log.i("XMPPChatDemoActivity ", "Sending text ");
                    if (connection != null) {
                        connection.sendPacket(mg);
                        messages.add("Me :");
                        messages.add(text);
                        setListAdapter();
                    }
                    textMessage.setText("");
                }
            });

这就是我为连接会议室所写的内容

muc = new MultiUserChat(connection, "del@conference.jabber.org");
            muc.join("alias name","password");

输出我在发送消息时得到的内容

me: hello
del: hello

我想要的是当我发送信息时没有重复的信息,即

me: hello

2 个答案:

答案 0 :(得分:4)

当您在MUC房间时,您会收到所有消息的副本,包括您自己的消息。 http://xmpp.org/extensions/xep-0045.html#message - “并将消息反映给每个占用者的完整JID。”

因此,对于MUC(不是直接消息),如果您同时记录发送和接收(假设您有足够的发布权限等),您将获得重复。您的选择在很大程度上要么不记录发送(这是大多数客户选择的选项),要么尝试进行智能消息匹配以检测何时收到您自己的消息并将其删除。前一个选项确保每个人都能看到一致的消息排序视图,有些人认为这非常有用。

答案 1 :(得分:2)

也许您的聊天服务器也向您发送了消息?

因此,您在onClickListener中手动添加一条消息,然后从服务器收到相同的消息。

我认为,不添加来自onClickListener的消息是正确的 - 只添加服务器发送的消息。