Removes unnecessary disco info sent before joinning the room.

cusax-fix
hristoterezov 12 years ago
parent 7b27caa78a
commit 2689368bab

@ -504,6 +504,13 @@ public void joinAs(String nickname, byte[] password)
}
else
{
this.provider.getConnection().addPacketListener(
new PresenceListeners(this),
new AndFilter(
new FromMatchesFilter(
multiUserChat.getRoom() + "/" + nickname),
new PacketTypeFilter(
org.jivesoftware.smack.packet.Presence.class)));
if(password == null)
multiUserChat.join(nickname);
else
@ -2324,6 +2331,62 @@ MultiUserChat getMultiUserChat()
{
return multiUserChat;
}
/**
* Listens for presence packets.
*/
private class PresenceListeners
implements PacketListener
{
/**
* Chat room associated with the listener.
*/
private ChatRoom chatRoom;
/**
* Creates an instance of a listener of presence packets.
*
* @param chatRoom the chat room associated with the listener
*/
public PresenceListeners(ChatRoom chatRoom)
{
super();
this.chatRoom = chatRoom;
}
/**
* Process incoming presence packet, checks if the room is created and
* finishes the creation of the room.
* @param packet the incoming packet.
*/
@Override
public void processPacket(Packet packet)
{
Presence presence = (Presence) packet;
if (presence == null || presence.getError() != null)
return;
MUCUser mucUser = getMUCUserExtension(packet);
if (mucUser != null && mucUser.getStatus() != null) {
if ("201".equals(mucUser.getStatus().getCode())) {
try
{
multiUserChat.sendConfigurationForm(
new Form(Form.TYPE_SUBMIT));
} catch (XMPPException e)
{
logger.error("Failed to send config form.", e);
}
opSetMuc.addSmackInvitationRejectionListener(multiUserChat,
chatRoom);
setLocalUserRole(ChatRoomMemberRole.MODERATOR);
provider.getConnection().removePacketListener(this);
}
}
}
}
/**
* Listens for rejection message and delivers system message when received.

@ -74,6 +74,21 @@ public class OperationSetMultiUserChatJabberImpl
presenceOpSet.addSubscriptionListener(this);
}
/**
* Add SmackInvitationRejectionListener to <tt>MultiUserChat</tt> instance
* which will dispatch all rejection events.
*
* @param muc the smack MultiUserChat instance that we're going to wrap our
* chat room around.
* @param chatRoom the associated chat room instance
*/
public void addSmackInvitationRejectionListener(MultiUserChat muc,
ChatRoom chatRoom)
{
muc.addInvitationRejectionListener(
new SmackInvitationRejectionListener(chatRoom));
}
/**
* Creates a room with the named <tt>roomName</tt> and according to the
* specified <tt>roomProperties</tt> on the server that this protocol
@ -168,21 +183,19 @@ private ChatRoom createLocalChatRoomInstance(MultiUserChat muc)
// Add the contained in this class SmackInvitationRejectionListener
// which will dispatch all rejection events to the
// ChatRoomInvitationRejectionListener.
muc.addInvitationRejectionListener(
new SmackInvitationRejectionListener(chatRoom));
addSmackInvitationRejectionListener(muc, chatRoom);
return chatRoom;
}
}
/**
* Returns a reference to a chatRoom named <tt>roomName</tt> or null
* if that room does not exist.
* Returns a reference to a chatRoom named <tt>roomName</tt>. If the room
* doesn't exists in the cache it creates it.
*
* @param roomName the name of the <tt>ChatRoom</tt> that we're looking
* for.
* @return the <tt>ChatRoom</tt> named <tt>roomName</tt> if it exists, null
* otherwise.
* @return the <tt>ChatRoom</tt> named <tt>roomName</tt>
* @throws OperationFailedException if an error occurs while trying to
* discover the room on the server.
* @throws OperationNotSupportedException if the server does not support
@ -200,26 +213,12 @@ public synchronized ChatRoom findRoom(String roomName)
if (room != null)
return room;
try
{
// throws Exception if room does not exist
// do not use MultiUserChat.getRoomInfo as there is a bug which
// throws NPE
ServiceDiscoveryManager.getInstanceFor(getXmppConnection()).
discoverInfo(canonicalRoomName);
MultiUserChat muc
= new MultiUserChat(getXmppConnection(), canonicalRoomName);
MultiUserChat muc
= new MultiUserChat(getXmppConnection(), canonicalRoomName);
room = new ChatRoomJabberImpl(muc, jabberProvider);
chatRoomCache.put(canonicalRoomName, room);
return room;
}
catch (XMPPException e)
{
// room not found
return null;
}
room = new ChatRoomJabberImpl(muc, jabberProvider);
chatRoomCache.put(canonicalRoomName, room);
return room;
}
/**
@ -597,11 +596,6 @@ public void invitationReceived(Connection conn,
try
{
chatRoom = (ChatRoomJabberImpl) findRoom(room);
if (chatRoom == null)
{
MultiUserChat muc = new MultiUserChat(conn, room);
chatRoom = new ChatRoomJabberImpl(muc, jabberProvider);
}
if (password != null)
fireInvitationEvent(
chatRoom, inviter, reason, password.getBytes());

@ -529,6 +529,10 @@ public void testFindRoom()
opSet1Room.join();
ChatRoom foundRoom = null;
/*
//findRoom always returns ChatRoom instance. If it doesn't exists in
//the cache it creates an instance of ChatRoom.
try
{
foundRoom = opSetMUC1.findRoom("WhoCreatedThatRoom");
@ -539,7 +543,7 @@ public void testFindRoom()
}
assertNull("wasnt expecting to find the room named " +
"'WhoCreatedThatRoom' on server", foundRoom);
*/
// to find the existing room created with opSetMUC1,
// we will use opSetMUC2 to be sure the room will not be retrieved from
// opSetMUC1 cache

Loading…
Cancel
Save