Hello Smack devs,
I am trying to join all the MultiUserChat as soon as my client got authenticated. I managed to store a list of joined MUC on client side but i am facing following issue while doing that.
When my client got authenticated and then when i execute the MultiUserChat.join() this method never returns and i can join only the one room at the moment and i can see that user has joined a MUC on the server side as well as i can send/receive a message to that MUC.
Is there any way that i can join multiple MUC at the same time and can set up a listners on each MUC so i can receive a messages from each and every MUC which i am part of.
I am attaching the code snippet of my Main method which is as per following
public static void main(final String[] args) { Scanner sc = new Scanner(System.in); System.out.println("enter username "); final String username = sc.nextLine(); System.out.println("enter password "); final String password = sc.nextLine(); try { // This method will give you TCP connection object from the smack. final XMPPTCPConnection connection = GetXmppConnection.getConnection(username, password); System.out.println( "Connected :- " + connection.isConnected() + " Authenicated " + connection.isAuthenticated()); System.out.println("Enter Room id"); final MultiUserChatManager mucManager = MultiUserChatManager.getInstanceFor(connection); Thread thread = new Thread(new Runnable() { @Override public void run() { try { MultiUserChat muc = mucManager .getMultiUserChat(JidCreate.entityBareFrom("abcd@conference.domain")); Resourcepart nickName = Resourcepart.from(username); MucEnterConfiguration mucEnterConfiguration = muc.getEnterConfigurationBuilder(nickName) .requestNoHistory().build(); if (!muc.isJoined()) { muc.join(mucEnterConfiguration); } // This code will never execute. System.out.println("Muc Joined sucessfully !!! "); Set joinedRooms = mucManager.getJoinedRooms(); for (EntityBareJid entityBareJid : joinedRooms) { System.out.println(String.format("Room name %s", entityBareJid.asBareJid())); } System.out.println(String.format("%s Room joined sucessfully", "abcd")); } catch (Exception e) { e.printStackTrace(); } } }); thread.start(); System.out.println("Press something to send a message"); String line = sc.nextLine(); while (!line.equals("stop")) { System.out.println("To : - "); String to = sc.nextLine(); System.out.println("Enter Message to send :- "); String body = sc.nextLine(); String stanzaId = String.valueOf(new Date().getTime()); Message message = new Message(); message.setTo(JidCreate.from(to)); message.setBody(body); message.setStanzaId(String.valueOf(stanzaId)); message.setType(Type.groupchat); connection.sendStanza(message); System.out.println(String.format("Message %s ", message.toXML(null))); System.out.println("Press stop to stop sending message or something else to continue again"); line = sc.nextLine(); } sc.nextLine(); } catch (Exception e) { e.printStackTrace(); } sc.close(); }
I am using following libs to make this happen
Smack - 4.3.4
openfire - 4.4.2
Java JDK - 1.8
Please suggest anything or let me know if i am doing anything wrong.
Thanks