2016-07-07 2 views
-2

Я пытаюсь создать образец Java-приложения для реализации MultiUserChat XMPP. Некоторые, как я могу создать пользователя и сделать его онлайн в openfire. Может ли кто-нибудь предложить, как присоединиться ко всем пользователям к созданному chatRoom?XMPP Групповой чат java - логика, чтобы присоединиться к пользователям в комнате внутри приглашающего слушателя не работает

Вот мой пример кода внутри класса 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, "[email protected]"); 

     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(); 
      } 
     } 
    }); 
} 

Заранее спасибо.

+0

Возможный дубликат [Добавление участников в чатах XMPP] (http://stackoverflow.com/questions/14098075/adding-participants-to-xmpp- чаты) – legoscia

+0

Моя проблема в том, что даже если я приглашу пользователя присоединиться к группе, пользователь не будет присоединен к группе. Это мой вопрос. Есть идеи? @ legoscia – Anonymous

+0

Да, как описано в [этом ответе] (http://stackoverflow.com/a/23953973/113848), нет способа заставить пользователя присоединиться к группе: пользователь получает приглашение и должен решают, как/действовать на нем. – legoscia

ответ

0

Я решил свою проблему выше, создав новый экземпляр MultiUserChat.

Вот мой отредактированный метод '' createAcceptInvitationListener

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, "[email protected]"); 

       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); 
}