【问题标题】:Duplicate message received in XMPP Multi User Conference RoomXMPP 多用户会议室收到重复消息
【发布时间】:2014-10-20 14:23:05
【问题描述】:

当 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

【问题讨论】:

  • 我面临同样的问题。你能发布你的答案吗?
  • @Pravin 我面临同样的问题。你是怎么解决的?

标签: xmpp smack muc


【解决方案1】:

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

因此,对于 MUC(不适用于直接消息),如果您同时登录发送和接收(假设您有足够的权限访问帖子等),您将得到一个副本。您的选择主要是在发送时不记录(这是大多数客户选择的选项),或者尝试进行智能消息匹配以检测您何时收到自己的消息并忽略它。前一个选项确保每个人都能看到一致的消息排序视图,有些人认为这非常有用。

【讨论】:

  • 谢谢kev,我看了一些关于MUC的文件,知道它会在会议室广播消息。我通过消息匹配解决了我的问题。
【解决方案2】:

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

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

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

【讨论】:

  • 我很确定 MUC 反映了这个信息。我把它作为练习留给 OP 来阅读 XEP-45 中的内容,如果我弄错了,请纠正我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多