Removes unnecessary disco info sent before joinning the room.

cusax-fix
hristoterezov 12 years ago
parent c515624c49
commit 6ef4e97131

@ -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() + "/" + this.nickname),
new PacketTypeFilter(
org.jivesoftware.smack.packet.Presence.class)));
if(password == null)
multiUserChat.join(nickname);
else
@ -2325,6 +2332,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,8 +183,7 @@ 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;
}
@ -200,26 +214,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 +597,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());

Loading…
Cancel
Save