2017-08-08 2 views
0

Je suis nouveau dans android et j'ai essayé de créer une application de chat en utilisant smack api et ejabberd. j'implémente le chat one to one et son travail bien. mais je ne peux pas recevoir le message de chatroom. comment puis-je faire?Comment recevoir le message de chatroom en utilisant samck API, XMPP

est ici xmpp.java

public class MyXMPP { 
     public MyXMPP(MyService context, String serverAdress, String logiUser, 
         String passwordser) { 
      this.serverAddress = serverAdress; 
      this.loginUser = logiUser; 
      this.passwordUser = passwordser; 
      this.context = context; 
      this.applicationContext = context; 
      init(); 
     } 
     public static MyXMPP getInstance(MyService context, String server,String user, String pass) { 
      if (instance == null) { 
       instance = new MyXMPP(context, server, user, pass); 
       instanceCreated = true; 
      } 
      return instance; 
     } 
     public org.jivesoftware.smack.chat.Chat Mychat; 
     ChatManagerListenerImpl mChatManagerListener; 
     MMessageListener mMessageListener; 
     static { 
      try { 
       Class.forName("org.jivesoftware.smack.ReconnectionManager"); 
      } catch (ClassNotFoundException ex) { 
       // problem loading reconnection manager 
      } 
     } 
     public void init() { 
      gson = new Gson(); 
      mMessageListener = new MMessageListener(context); 
      mChatManagerListener = new ChatManagerListenerImpl(); 
      initialiseConnection(); 

     } 
     private void initialiseConnection() { 
      XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration 
        .builder(); 
      config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); 
      config.setServiceName(serverAddress); 
      config.setHost("192.168.0.101"); 
      config.setPort(5222); 
      config.setDebuggerEnabled(true); 
      XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true); 
      XMPPTCPConnection.setUseStreamManagementDefault(true); 
      connection = new XMPPTCPConnection(config.build()); 
      XMPPConnectionListener connectionListener = new XMPPConnectionListener(); 
      connection.addConnectionListener(connectionListener); 
     } 
     private class ChatManagerListenerImpl implements ChatManagerListener { 
      @Override 
      public void chatCreated(final org.jivesoftware.smack.chat.Chat chat, 
       final boolean createdLocally) { 
       if (!createdLocally) 
        chat.addMessageListener(mMessageListener); 

      } 

     } 
     public void sendMessage(ChatMessage chatMessage) { 
      String body = gson.toJson(chatMessage); 
      Mychat = ChatManager.getInstanceFor(connection).createChat(
        chatMessage.receiver + "@" 
          + context.getString(R.string.server), 
        mMessageListener); 
      chat_created = true; 
      final Message message = new Message(); 
      message.setBody(body); 
      message.setStanzaId(chatMessage.msgid); 
      message.setTo(chatMessage.receiver); 
      message.setFrom(chatMessage.sender); 
      message.setType(Message.Type.chat); 
      Mychat.sendMessage(chatMessage.body); 
     } 

     public void sendGroupMessage(ChatMessage chatMessage) { 
      MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection); 
      MultiUserChat multiUserChat = manager.getMultiUserChat(chatMessage.receiver); 
      try { 
       multiUserChat.join(chatMessage.sender,"12345"); 
    //   multiUserChat.addMessageListener((MessageListener) mMessageListener); 
      } catch (XMPPException.XMPPErrorException e) { 
       e.printStackTrace(); 
      } catch (SmackException e) { 
       e.printStackTrace(); 
      } 
      Message message = new Message(chatMessage.receiver, Message.Type.groupchat); 
      message.setBody(chatMessage.body); 
      message.setType(Message.Type.groupchat); 
      message.setFrom(chatMessage.sender); 
      message.setTo(chatMessage.receiver); 
      multiUserChat.sendMessage(message); 
     } 

     /* Its work good for one to one chat */ 
     private class MMessageListener implements ChatMessageListener { 
      Context context; 
      public MMessageListener(Context c) { 
       this.context = c; 
      } 
      @Override 
      public void processMessage(final org.jivesoftware.smack.chat.Chat chat, 
       final Message message) { 
       if (message.getType() == Message.Type.chat 
         && message.getBody() != null) { 
        Log.d("Message received",message.getBody); 
       } 
      } 
     } 
    } 

i mettre en œuvre toute la connexion XMPP de connexion dans xmpp.java sendGroupMessage() est utilisé pour envoyer un message chat room et son bon travail. le problème est de recevoir le message de la salle de conversation.

Je reçois aussi un message dans journal Android ici est l'image enter image description here

+0

signifie que vous êtes en mesure d'envoyer des messages et ne pas les recevoir dans un 1: 1 le chat? –

+0

Oui @SarthakMittal –

+0

Ok, alors comment pouvez-vous valider que le message a été envoyé avec succès? –

Répondre

1

La classe Chat que vous utilisez est désapprouvée! Je vous recommande de mettre à jour votre bibliothèque smack vers la dernière version (4.2 actuellement).

Voici comment vous pouvez joindre un écouteur d'un message entrant dans Smack-4,2

XMPPTCPConnection connection; // Assuming you have the connection object 

org.jivesoftware.smack.chat2.ChatManager chatManager = org.jivesoftware.smack.chat2.ChatManager.getInstanceFor(connection); 
chatManager.addIncomingListener(new IncomingChatMessageListener() 
{ 
    @Override 
    public void newIncomingMessage(EntityBareJid from, Message message, org.jivesoftware.smack.chat2.Chat chat) 
    { 
     // Message received here 
    } 
}); 
+0

j'ai mis à jour mon xmpp.java –

+0

pouvez-vous afficher seulement la partie pertinente :) Je vais jeter un oeil dès que je reçois un peu de temps :) –

+0

okk @ Sarthak je met à jour mon code –