Как получать оффлайн сообщения asmack (Android) в реальном времени - PullRequest
0 голосов
/ 14 мая 2019

Привет, я новичок на открытом огне.

На сервере openfire включена опция автономных сообщений.

Пользователь А онлайн, Пользователь Б онлайн, в этом случае я могу получать сообщения.

Теперь пользователь B выключил свой WiFi (Примечание: пользователь A ждал, пока сеанс пользователя B полностью не был уничтожен на сервере), теперь пользователь A отправил сообщение пользователю B. Теперь пользователь B снова подключается к сети, сервер отправляет сообщение пользователю B в течение 10 минут .

Мой код

private class MyLoginTask extends AsyncTask<String, String, String> {
  @Override
  protected String doInBackground(String... params) {
   realm = Realm.getDefaultInstance();
    dataUsers = realm.where(EntityUsers.class).findFirst();
    if (dataUsers != null) {
        userName2 = dataUsers.getUsername();
        password = dataUsers.getPass();
        } 
     new Thread() {
        @Override
          public void run() {
            InetAddress addr = null;
          try {
                addr = InetAddress.getByName(domainAddress);
              } catch (UnknownHostException e) {
                e.printStackTrace();
              }
            HostnameVerifier verifier = new HostnameVerifier() {
              @Override
            public boolean verify(String hostname, SSLSession session) {
                     return false;
                }
             };
             DomainBareJid serviceName = null;
              try {
                    serviceName = JidCreate.domainBareFrom(domainAddress);
                } catch (XmppStringprepException e) {
                    e.printStackTrace();
                }
                XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
                        .setUsernameAndPassword(userName2, password)//userName2,"spinku12345"
                        .setPort(5222)
                        .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
                        .setXmppDomain(serviceName)
                        .setHostnameVerifier(verifier)
                        .setHostAddress(addr)
                        .setDebuggerEnabled(true)
                        .setSendPresence(true)
                        .build();
                mConnection = new XMPPTCPConnection(config);
                try {
                    mConnection.connect();

                    if(mConnection.isConnected()) {
                        Log.w("app", "conn done");
                    }
                    mConnection.login();

                    if (mConnection.isAuthenticated() && mConnection.isConnected()) {

                        Log.e(TAG, "run: auth done and connected successfully");
                        ChatManager chatManager = ChatManager.getInstanceFor(mConnection);
                        chatManager.addListener(new IncomingChatMessageListener() {
                            @Override
                            public void newIncomingMessage(EntityBareJid from, Message message, Chat chat) {
                                Log.e(TAG, "New message from " + from + ": " + message.getBody());
                                final MessagesData data = new MessagesData("(" + getTime() + ")" + userName1, message.getBody().toString(), 0);//received
                                mMessagesData.add(data);
                                vibrator.vibrate(500);
                                mRingtone.play();
                                //now update recyler view
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        //this ui thread important otherwise error occur
                                        mAdapter = new Adapter(mMessagesData);
                                        mRecyclerView.setAdapter(mAdapter);\
                                    }
                                });
                            }
                        });
                    }
                } catch (SmackException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (XMPPException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

        }.start();

        return "";
    }

Как настроить сервер для отправки автономных сообщений в режиме реального времени.

...