XMPP组聊天java - 在邀请监听器内的房间加入用户的逻辑不起作用

时间:2016-07-07 13:30:02

标签: java xmpp openfire smack

我正在尝试创建示例Java应用程序来实现XMPP的MultiUserChat。一些我如何能够在openfire中创建用户并使其在线。任何人都可以建议如何将所有用户加入创建的chatRoom吗?

以下是我在SampleMultiUserChat类中的示例代码。我邀请所有用户加入该组,但它没有加入。我缺少什么?

SampleMultiUserChat(){
    oConnectionConfiguration = new ConnectionConfiguration("10.10.1.105",5223);
    createChatRoom();
}

/**
 * @param args
 */
public static void main(String[] args) {
    SampleMultiUserChat oSampleMultiUserChat = new SampleMultiUserChat();

    for(int i = 2; i < 4; i++){
        oSampleMultiUserChat.openXMPPConnection("user"+i);
        oSampleMultiUserChat.createAcceptInvitationListener("user"+i);
        oSampleMultiUserChat.inviteToJoinRoom("user"+i);
    }

    Thread mainThread = Thread.currentThread();
    while(true){
        try {
            mainThread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

private void openXMPPConnection(String user){
    XMPPConnection oXmppConnection = new XMPPConnection(oConnectionConfiguration);
    try {
        oXmppConnection.connect();
        oXmppConnection.login(user, "60474c9c10d7142b7508ce7a50acf414");
        userConnection.put(user, oXmppConnection);
    } catch (XMPPException e) {
        System.out.println("Exception occured in login in user : "+user);
    }
}

private void createChatRoom(){
    XMPPConnection oXmppConnection = new XMPPConnection(oConnectionConfiguration);
    try {
        oXmppConnection.connect();
        oXmppConnection.login("user1", "60474c9c10d7142b7508ce7a50acf414");

        myChattingRoom = new MultiUserChat(oXmppConnection, "mychattingroom@conference.10.10.1.105");

        myChattingRoom.create("roomNickName");
        myChattingRoom.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));
    } catch (XMPPException e) {
        e.printStackTrace();
    }
}

private void inviteToJoinRoom(String user){
    myChattingRoom.invite(user+"@10.10.1.105", "Please join my chatting room");
    System.out.println("sent invitation by "+user);
}

private void sendMessage(String msg){
    try {
        myChattingRoom.sendMessage(msg);
    } catch (XMPPException e) {
        System.out.println("Exception occured while sending msg to chat room"+e);
    }
}

private void createAcceptInvitationListener(String user){
    MultiUserChat.addInvitationListener(userConnection.get(user), new InvitationListener() {

        public void invitationReceived(Connection connection, String room, String inviter,
                String reason, String password, Message msg) {
            try {
                myChattingRoom.join(connection.getUser().substring(0, connection.getUser().indexOf("@")));
            } catch (XMPPException e) {
                e.printStackTrace();
            }
        }
    });
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

我通过创建MultiUserChat的新实例解决了上述问题。

以下是我编辑过的方法&#39; createAcceptInvitationListener&#39;

private void createAcceptInvitationListener(String user){
    System.out.println("inside create accept invitation listener");
    final XMPPConnection oXmppConnection = userConnection.get(user);

    MultiUserChat.addInvitationListener(oXmppConnection, new InvitationListener() {

        public void invitationReceived(Connection connection, String room, String inviter,
                String reason, String password, Message msg) {
            System.out.println("inside invitation received method");
            try {
                System.out.println(connection.getUser().substring(0, connection.getUser().indexOf("@")));
                MultiUserChat myChattingRoom = new MultiUserChat(oXmppConnection, "mychattingroom@conference.10.10.1.105");

                myChattingRoom.join(connection.getUser().substring(0, connection.getUser().indexOf("@")));

            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("Exception occured while joining the chat room : "+e);
            }
        }
    });
}

private void reservedRoomsCreation(MultiUserChat myChattingRoom) throws XMPPException{
    Form form = myChattingRoom.getConfigurationForm();
    Form submitForm = form.createAnswerForm();
    for(Iterator fields = form.getFields(); fields.hasNext();){
        FormField formFields = (FormField) fields.next();
        if (!FormField.TYPE_HIDDEN.equals(formFields.getType()) && formFields.getVariable() != null) {
            submitForm.setDefaultAnswer(formFields.getVariable());
        }
    }
    submitForm.setAnswer("muc#roomconfig_persistentroom", true);
    myChattingRoom.sendConfigurationForm(submitForm);
}