mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-27 00:32:07 +01:00
Modified to allow sending extensions when inviting a user to a room. SMACK-40
git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@2444 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
parent
1bf4d2fed2
commit
075db51590
3 changed files with 30 additions and 23 deletions
|
@ -21,6 +21,7 @@
|
||||||
package org.jivesoftware.smackx.muc;
|
package org.jivesoftware.smackx.muc;
|
||||||
|
|
||||||
import org.jivesoftware.smack.XMPPConnection;
|
import org.jivesoftware.smack.XMPPConnection;
|
||||||
|
import org.jivesoftware.smack.packet.Message;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A listener that is fired anytime an invitation to join a MUC room is received.
|
* A listener that is fired anytime an invitation to join a MUC room is received.
|
||||||
|
@ -40,12 +41,9 @@ public interface InvitationListener {
|
||||||
* @param inviter the inviter that sent the invitation. (e.g. crone1@shakespeare.lit).
|
* @param inviter the inviter that sent the invitation. (e.g. crone1@shakespeare.lit).
|
||||||
* @param reason the reason why the inviter sent the invitation.
|
* @param reason the reason why the inviter sent the invitation.
|
||||||
* @param password the password to use when joining the room.
|
* @param password the password to use when joining the room.
|
||||||
|
* @param message the message used by the inviter to send the invitation.
|
||||||
*/
|
*/
|
||||||
public abstract void invitationReceived(
|
public abstract void invitationReceived(XMPPConnection conn, String room, String inviter, String reason,
|
||||||
XMPPConnection conn,
|
String password, Message message);
|
||||||
String room,
|
|
||||||
String inviter,
|
|
||||||
String reason,
|
|
||||||
String password);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -639,8 +639,23 @@ public class MultiUserChat {
|
||||||
* @param reason the reason why the user is being invited.
|
* @param reason the reason why the user is being invited.
|
||||||
*/
|
*/
|
||||||
public void invite(String user, String reason) {
|
public void invite(String user, String reason) {
|
||||||
|
invite(new Message(), user, reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invites another user to the room in which one is an occupant using a given Message. The invitation
|
||||||
|
* will be sent to the room which in turn will forward the invitation to the invitee.<p>
|
||||||
|
*
|
||||||
|
* If the room is password-protected, the invitee will receive a password to use to join
|
||||||
|
* the room. If the room is members-only, the the invitee may be added to the member list.
|
||||||
|
*
|
||||||
|
* @param message the message to use for sending the invitation.
|
||||||
|
* @param user the user to invite to the room.(e.g. hecate@shakespeare.lit)
|
||||||
|
* @param reason the reason why the user is being invited.
|
||||||
|
*/
|
||||||
|
public void invite(Message message, String user, String reason) {
|
||||||
// TODO listen for 404 error code when inviter supplies a non-existent JID
|
// TODO listen for 404 error code when inviter supplies a non-existent JID
|
||||||
Message message = new Message(room);
|
message.setTo(room);
|
||||||
|
|
||||||
// Create the MUCUser packet that will include the invitation
|
// Create the MUCUser packet that will include the invitation
|
||||||
MUCUser mucUser = new MUCUser();
|
MUCUser mucUser = new MUCUser();
|
||||||
|
@ -652,7 +667,6 @@ public class MultiUserChat {
|
||||||
message.addExtension(mucUser);
|
message.addExtension(mucUser);
|
||||||
|
|
||||||
connection.sendPacket(message);
|
connection.sendPacket(message);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2465,18 +2479,15 @@ public class MultiUserChat {
|
||||||
/**
|
/**
|
||||||
* Fires invitation listeners.
|
* Fires invitation listeners.
|
||||||
*/
|
*/
|
||||||
private void fireInvitationListeners(
|
private void fireInvitationListeners(String room, String inviter, String reason, String password,
|
||||||
String room,
|
Message message) {
|
||||||
String inviter,
|
|
||||||
String reason,
|
|
||||||
String password) {
|
|
||||||
InvitationListener[] listeners = null;
|
InvitationListener[] listeners = null;
|
||||||
synchronized (invitationsListeners) {
|
synchronized (invitationsListeners) {
|
||||||
listeners = new InvitationListener[invitationsListeners.size()];
|
listeners = new InvitationListener[invitationsListeners.size()];
|
||||||
invitationsListeners.toArray(listeners);
|
invitationsListeners.toArray(listeners);
|
||||||
}
|
}
|
||||||
for (int i = 0; i < listeners.length; i++) {
|
for (int i = 0; i < listeners.length; i++) {
|
||||||
listeners[i].invitationReceived(connection, room, inviter, reason, password);
|
listeners[i].invitationReceived(connection, room, inviter, reason, password, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2507,11 +2518,8 @@ public class MultiUserChat {
|
||||||
// Check if the MUCUser extension includes an invitation
|
// Check if the MUCUser extension includes an invitation
|
||||||
if (mucUser.getInvite() != null) {
|
if (mucUser.getInvite() != null) {
|
||||||
// Fire event for invitation listeners
|
// Fire event for invitation listeners
|
||||||
fireInvitationListeners(
|
fireInvitationListeners(packet.getFrom(), mucUser.getInvite().getFrom(),
|
||||||
packet.getFrom(),
|
mucUser.getInvite().getReason(), mucUser.getPassword(), (Message) packet);
|
||||||
mucUser.getInvite().getFrom(),
|
|
||||||
mucUser.getInvite().getReason(),
|
|
||||||
mucUser.getPassword());
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -280,18 +280,19 @@ public class MultiUserChatTest extends SmackTestCase {
|
||||||
String room,
|
String room,
|
||||||
String inviter,
|
String inviter,
|
||||||
String reason,
|
String reason,
|
||||||
String password) {
|
String password,
|
||||||
// Indicate that the invitation was received
|
Message message) {
|
||||||
|
// Indicate that the invitation was received
|
||||||
answer[0] = reason;
|
answer[0] = reason;
|
||||||
// Reject the invitation
|
// Reject the invitation
|
||||||
MultiUserChat.decline(conn, room, inviter, "I'm busy right now");
|
MultiUserChat.decline(conn, room, inviter, "I'm busy right now");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// User2 is listening to invitation rejections
|
// User2 is listening to invitation rejections
|
||||||
muc2.addInvitationRejectionListener(new InvitationRejectionListener() {
|
muc2.addInvitationRejectionListener(new InvitationRejectionListener() {
|
||||||
public void invitationDeclined(String invitee, String reason) {
|
public void invitationDeclined(String invitee, String reason) {
|
||||||
// Indicate that the rejection was received
|
// Indicate that the rejection was received
|
||||||
answer[1] = reason;
|
answer[1] = reason;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue