2014-10-21 1 views
2

Я использую ниже программное обеспечение для приложения чата для AndroidOpenfire: не в состоянии послать пакет через несколько (2-3) часов, даже если я уже подключенных к серверу Openfire

  1. XMPP сервер: Openfire 3.9.3
  2. XMPP Клиент: Asmack-android-8-4.0.4.jar

Я столкнулся некоторые странное поведение сервера Openfire при изменении присутствия вошедшего в систему пользователя вручную.

Ниже кусок кода из моего класса

xmppConfig.setSendPresence(false); 
// Call first time only while configuration connection 
presence = new Presence(Type.available, Constant.STATUS_ONLINE, 1, Mode.available); 
// Code to change the presence of user 
connection.sendPacket(presence); 

Нормальные журналы, где я могу изменить присутствие пользователя (я проверил на портале Openfire и она работает, как принято):

SENT (1): <presence id='z13q2-27'><status>online</status></presence> 
RCV (1): <presence id="z13q2-26" from="[email protected]**********.com/Smack" 
to="[email protected]**********.com/Smack"><status>online</status></presence> 

Через несколько (2-3) часов, когда я вернусь к приложению и пытаюсь установить присутствие в Интернете (I сп ecked на портале Openfire, и этот пользователь показывает присутствие в автономном режиме, даже если я установил присутствие в Интернете).

SENT (1): <presence id='z13q2-27'><status>online</status></presence> 
//**** No packet replay of change presence ********* 

Я проверил ниже значения после вышеуказанного сценария, чтобы проверить, если пользователь все еще подключен, но я получил результат ниже, который указывает на то, что соединение жив, и пользователь все еще подключен, но в то же самое время (веб) портала Openfire показывает, что пользователь отсутствует,

xmppManager.getConnection().isConnected()  //Result(true) 
xmppManager.getConnection().isAuthenticated() //Result(true) 
xmppManager.getConnection().isAnonymous() //Result(false) 

Я не могу отправить сообщение кому-то и не получить сообщение после того, как над сценарием.


SENT (0): <message id='9388u-21' to='[email protected]*********.com' type='chat'> 
<subject>nullMedia</subject><body>Test message</body><custom_data> 
<aliasNmae>Robine H.</aliasNmae><profilePicUrl></profilePicUrl> 
</custom_data><request xmlns='urn:xmpp:receipts'/></message> 

Выше журнал, когда я отправить сообщение после вышеуказанного сценария, и здесь <custom_data> моего заказа продолжение.

Даже когда я проверяю историю в Openfire, после описанного выше сценария нет сообщений.


Я не уверен, есть ли возможность сохранить долгоживущую соединения через сервер Openfire (веб-портал) или я делаю что-то здесь не так с клиентом XMPP.

Прошу вас, если у кого-нибудь возникнут некоторые мысли об этой странной ситуации.

ответ

2

Я проверил ниже значения после выше сценария, чтобы проверить, если пользователь еще подключен, но я получил ниже результат, который показывает, что соединение жив

Нет, это только признаки того, что Смак не осознавая поврежденное соединение.Существует множество причин, по которым связь может быть нарушена без уведомления библиотеки.

Если вы хотите проверить правильность подключения, используйте PingManager.pingMyServer().

+0

Я вижу, как насчет PingFailedListener? я предполагаю, что это может быть indenftiy, когда пинг не получает понг. – dhams

+0

pingManager.pingMyServer() дает мне NullPointerException. Это полная трассировка org.jivesoftware.smackx.ping.PingManager.pingMyServer (PingManager.java:244) 10-22 16: 05: 47.414: E/AndroidRuntime (7101): \t на org.jivesoftware.smackx.ping. PingManager.pingMyServer (PingManager.java:220) 10-22 16: 05: 47.414: E/AndroidRuntime (7101): \t at com.demo.DemonServices $ 2.run (DemonServices.java:74) 10-22 16: 05: 47.414: E/AndroidRuntime (7101): \t at java.lang.Thread.run (Thread.java:841) – dhams

+0

Я понял, что ошибка, диспетчер пинга не был инициализирован, я пришел с этой проблемой, но я Не поймите, почему менеджер пинга перестает выходить из строя после определенного интервала? Делает ли андроид что-то, чтобы убить runnable thread? – dhams