2014-07-17 42 views
2

我不確定如何正確收聽MultiUserChats,因爲顯然有兩種不同的方式來收聽它們。如何正確聆聽Smack中的MultiUserChat?

第一種方式是添加一個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(); 

考慮我也在聽文件傳輸,你能幫我弄清楚哪種方式是正確的?

回答

2

由於原代碼都有過錯誤,我用這個代碼:

 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); 



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

是正確的方法。

+0

我們需要接收消息之前加入聊天室? –