我不知道如何正确地监听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();考虑到我也在听文件传输,你能帮我找出哪种方式是正确的吗?
发布于 2014-07-18 16:46:41
由于最初的代码都有Bugs,所以我使用了以下代码:
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);
}发布于 2014-07-17 23:13:48
MultiUserChat muc = new MultiUserChat(connection,"MyGroup"); muc.addMessageListener(new PacketListener() {
@Override
public void processPacket(Packet packet) throws NotConnectedException {
// TODO Auto-generated method stub
} });才是正确的方法。
https://stackoverflow.com/questions/24808798
复制相似问题