从聊天中获取待处理消息

Posted

技术标签:

【中文标题】从聊天中获取待处理消息【英文标题】:Get pending messages from a Chat 【发布时间】:2013-11-11 23:51:41 【问题描述】:

我正在使用 quickblox 进行聊天,但在打开新聊天时遇到了一些问题。突然间,我收到了其他用户在我断开连接时发送给我的所有消息。问题是,当我开始与用户 A 聊天时,我会在用户 A 聊天室中收到来自用户 B、C、D.. 的聊天。

我找到了只显示 A 用户的方法。但问题是服务器已经向我发送了“断开连接”的消息,所以当我开始与 B 聊天时,我没有收到任何文本,因为用户 B 发送给我的消息已经传递(并且被忽略),而我正在和用户 A 聊天。

如何接收待处理的消息(一种历史记录)或仅检索我登录的聊天消息?

我的一段代码:

            // Create Connection.
            Connection.DEBUG_ENABLED = true;
            config     = new ConnectionConfiguration(CHAT_SERVER);
            connection = new XMPPConnection(config);

            try 
                connection.connect();
                connection.login(chatLogin, password);

                // Create Chat Manager.
                chatManager = connection.getChatManager();



                // Create Chat.
                chat = chatManager.createChat(friendLogin, null);

                //                  // Set listener for outcoming messages.
                //                  chatManager.addChatListener(chatManagerListener);


                // Accept only messages from
                String from_messages = Integer.toString(receiver_chat_id);

                PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class),
                        new FromContainsFilter(from_messages+"-3758@chat.quickblox.com"));

                // Collect these messages
                PacketCollector collector = connection.createPacketCollector(filter);

                Packet packet = collector.pollResult();

                PacketListener myListener = new PacketListener() 
                    public void processPacket(Packet packet) 
                        if (packet instanceof Message) 
                            Message msg = (Message) packet;
                            if(msg!=null)
                                // Process message
                                System.out.println("Rebem missatge: " +msg.getBody());

                            
                        
                    
                ;
                // Register the listener.
                connection.addPacketListener(myListener, filter);


                // Set listener for detect Receiver Status
                if (connection.isConnected())

                    roster = connection.getRoster();
                    roster.addRosterListener(new RosterListener() 
                        public void entriesDeleted(Collection<String> addresses) 
                        public void entriesUpdated(Collection<String> addresses) 
                        public void presenceChanged(Presence presence) 
                        public void entriesAdded(Collection<String> arg0) 
                    );
                

【问题讨论】:

【参考方案1】:

创建一个数组列表并将接收到的离线消息存储到该数组列表中。您可以在 processPacket(Packet packet) 函数中添加一个代码,以将传入消息添加到数组列表中。或者您可以使用 Multimaps(Google Guava) 来存储所有带有密钥的传入消息。当您打开显示来自某个人的消息的活动时,您可以将该人的姓名与密钥(存储在多地图中)匹配并显示该人的消息。更好的选择是存储与某个人的所有传入和传出消息聊天,以便您可以显示所有以前的聊天,然后打开活动。

【讨论】:

以上是关于从聊天中获取待处理消息的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BSC 上获取待处理的交易

Gitlab CI :- 在 gitlab 上推送后获取待处理状态

从一张桌子获取待处理的好友请求

ActiveMQ:一条待处理消息但队列为空

将付款转移到待处理状

rocketmq之顺序消费