1
votes

I have tried to establish chat connection between two users using xmpp and OpenFire. But i am not able to send and receive message. I have pasted my code below for reference. Any help will be very helpful.

I established a connection with Smack by

XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder();
                config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);              
                config.setUsernameAndPassword("admin", "admin");               
                config.setServiceName("172.21.4.199");              
                config.setHost("172.21.4.199");              
                config.setPort(5222);
                config.setDebuggerEnabled(true);
                config.setConnectTimeout(50000);
XMPPTCPConnection connection = new XMPPTCPConnection(config.build());

XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true);
XMPPTCPConnection.setUseStreamManagementDefault(true);

        try {
                    connection.setPacketReplyTimeout(50000);
                    connection.connect();
                    Log.d(TAG, "SetupDefaults -- Connected");
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.d(TAG, "SetupDefaults -- Connection failed exc: "+e);
                }

 and its gets succesfully connected. And i try to send a chat by using 

 ChatManager  chatManager = ChatManager.getInstanceFor(connection);
        Chat chat = chatManager.createChat("[email protected]", new ChatMessageListener() {
            @Override
            public void processMessage(Chat chat, Message message) {
                System.out.println("processMessage -- Sent message: " + message);
            }
        });

        try {
            chat.sendMessage("Hai.. Lets we chat!");
        }catch (Exception e){
            Log.d(TAG, "sendChat  Exc: "+e.toString());
        }

But i couldn't find that processMessage gets triggered. Because that S.O.P doesn't gets triggered. But i gets

SMACK: SENT (0): Hai.. Lets we chat!

SMACK: RECV (0): Hai.. Lets we chat!

in my console while sending a chat.

Simillarly i use,

PacketListener packetListener = new PacketListener() {
                       @Override
                       public void processPacket(Stanza packet) throws SmackException.NotConnectedException {
                           Message message = (Message)packet;
                           String from  = message.getFrom();
                           String body = message.getBody();
                           System.out.println("Message from: " + from + " " + body);
                       }
                    };
                    connection.addPacketListener(packetListener, filter);

to receive the chat. But processPacket also doesn't gets triggered.

1

1 Answers

0
votes

PacketListner it's something much more general to handle stanzas, it's not what you really need. You just need a ChatMessageListner

ChatManager chatManager;
chatManager = ChatManager.getInstanceFor(connection);       
chatManager.addChatListener(
                **new ChatManagerListener() {
                    @Override
                    public void chatCreated(Chat chat, boolean createdLocally)
                    {
                        if (!createdLocally)
                        {

                            chat.addMessageListener(new IncomingMessageListener());;
                        }
                    }
                })**;

Basic implementation:

class IncomingMessageListener implements ChatMessageListener {
    @Override
    public void processMessage(Chat arg0, Message message) {
        String from = message.getFrom();
        String body = message.getBody();

        if (body != null)
        {
            System.out.println(String.format("============ Received message '%1$s' from %2$s\n============", body, from));
            guiUpdate.displayMessage(body); /* custom method */
        }
        else
        {
            System.out.println("SYSTEM: ping");
        }
    }