【问题标题】:How to properly listen for MultiUserChat in Smack?如何在 Smack 中正确收听 MultiUserChat?
【发布时间】:2014-09-08 15:14:38
【问题描述】:

我不确定如何正确监听 MultiUserChats,因为显然有两种不同的方式来监听它们。

第一种方法是为每个房间添加一个MessageListener,像这样:

MultiUserChat muc = new MultiUserChat(connection,"MyGroup");
muc.addMessageListener(new PacketListener() {
    @Override
    public void processPacket(Packet packet) throws NotConnectedException {
        // TODO Auto-generated method stub
    }
});

第二种方法是像收听普通单聊消息一样收听:

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) {
            final String fromName = StringUtils.parseBareAddress(message.getFrom());
            final String Rtext = message.getBody();

考虑到我也在监听文件传输,你能帮我找出正确的方法吗?

【问题讨论】:

    标签: xmpp chat smack


    【解决方案1】:

    由于原始代码都有错误,我使用了这个代码:

         PacketFilter messageFilter =
    
                    new AndFilter(
    
                        new FromMatchesFilter(roomName+"@conference.reza-hp",true),
    
                        new MessageTypeFilter(Message.Type.groupchat));
    
                messageFilter = new AndFilter(messageFilter, new PacketFilter() {
    
                    public boolean accept(Packet packet) {
    
                        Message msg = (Message) packet;
    
                        return msg.getBody() != null;
    
    
    
                    }
    
                });
    
              addMessageListener(messageFilter);  
     }
    
        public static void addMessageListener(PacketFilter messageFilter) {
    
                connection.addPacketListener(new PacketListener() {
    
                    @Override
                    public void processPacket(Packet packet) throws NotConnectedException {
                         Message message = (Message)packet;  
                        String roomName = (message.getFrom().split("\\@conference.reza-
     hp"))[0];
                        String fromUser =    
     (StringUtils.parseResource(message.getFrom()).split("@\\@reza-hp"))[0];
    
                         System.out.println("=>"+"Room : "+roomName + "From   
     user:"+fromUser + ": "+message.getBody());  
    
                    }
                }, messageFilter);
    
    
    
            }
    

    【讨论】:

      【解决方案2】:
      MultiUserChat muc = new MultiUserChat(connection,"MyGroup"); muc.addMessageListener(new PacketListener() {
          @Override
          public void processPacket(Packet packet) throws NotConnectedException {
              // TODO Auto-generated method stub
          } });
      

      是正确的方法。

      【讨论】:

      • 是否需要加入房间才能收到消息?
      猜你喜欢
      • 2014-06-29
      • 2015-04-18
      • 1970-01-01
      • 2015-12-22
      • 2017-05-13
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 2017-01-12
      相关资源
      最近更新 更多