如何在Smack中正确收听MultiUserChat? [英] How to properly listen for MultiUserChat in Smack?

查看:163
本文介绍了如何在Smack中正确收听MultiUserChat?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不确定如何正确地监听MultiUserChats,因为显然有两种不同的监听方法。

I'm not sure how to properly listen for MultiUserChats, since there are apparently two different ways to listen for them.

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

The first way is to add a MessageListener for each room, like this:

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

第二种方法是像平常的单聊消息一样收听:

The second way is to listen as you would for normal single-chat messages:

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

考虑到我也在听文件传输,请您帮我弄清楚哪种方法是正确的方法?

Considering that I am also listening for file transfers, could you please help me figure out which way is the proper way?

推荐答案

由于原始代码都有错误,因此我使用了以下代码:

Since the Original Codes both Had Bugs, i used This code:

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



        }

这篇关于如何在Smack中正确收听MultiUserChat?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆