How to enable XEP-0199 in Smack?

I am using aSmack. My application listens for chat and responds to messages, but never sends a message. The application does not receive more messages if the chat remains in silence for a while, and then a new message is sent. I researched and I think that here is XEP-0199 . I see that @Flow (current supporting Smack) implemented it and the related problem was closed.

I think I need to use PingProvider, but I really don't know how to connect this class to Connection.

How to enable XEP-0199 ? How can i use PingProvider?


Connection Code:

smack = SmackAndroid.init(getActivity().getApplicationContext());
connection = new XMPPConnection(App.getServer());
connection.addConnectionListener(new ConnectionListener() {

    private final static String SMACK = "SMACK";

    @Override
    public void reconnectionSuccessful() {
        Log.i(SMACK , "reconnectionSuccessful");
    }

    @Override
    public void reconnectionFailed(Exception e) {
        Log.i(SMACK, "reconnectionFailed", e);
    }

    @Override
    public void reconnectingIn(int seconds) {
        Log.i(SMACK, "reconnectingIn " + seconds);
    }

    @Override
    public void connectionClosedOnError(Exception e) {
        Log.i(SMACK, "connectionClosedOnError", e);
    }

    @Override
    public void connectionClosed() {
        Log.i(SMACK, "connectionClosed");
    }
});
connection.connect();
connection.login(user, password);
+4
4

, ping :

connection.addPacketListener(new PacketListener() {

    @Override
    public void processPacket(Packet packet) {
        connection.sendPacket(new Pong((Ping) packet));
    }
}, new PacketFilter() {

    @Override
    public boolean accept(Packet packet) {
        return packet instanceof Ping;
    }
});
+6

PingManager pm =  PingManager.getInstanceFor(MyApplication.connection) ;
    pm.setPingInterval(5) ;  // 5 sec
    pm.pingMyServer() ;
    pm.registerPingFailedListener(new PingFailedListener() {

        @Override
        public void pingFailed() {
            Log.e(TAG , "pingFailed") ;
        }
    });
+5

XEP 0199 , Ping , . ping .

, . , . , . .

:

PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
        Network.connection.addPacketListener(new PacketListener() {
            public void processPacket(Packet packet) {
                Message message = (Message) packet;
                if (message.getBody() != null) {
                    String fromName = StringUtils.parseBareAddress(message.getFrom());
                    Log.i("XMPPClient", "Got text [" + message.getBody() + "] from [" + fromName + "]");
                   //recieve.setText(message.getBody());
                    /*messages.add(fromName + ":");
                    messages.add(message.getBody());*/
                    // Add the incoming message to the list view
                    item = new RowItem(R.drawable.billing, message.getBody());
                    adapter = new CustomListViewAdapter(getBaseContext(),
                            R.layout.list_item, rowItems);
                    rowItems.add(item);
                    //listView.setAdapter(adapter);
                }
            }
        }, filter);
+1

PingManager.getInstanceFor, XEP-0199.

0

Source: https://habr.com/ru/post/1542638/


All Articles