Клиент Smack — пользователь все еще «в сети», хотя соединение прервано.

Я столкнулся с довольно странным поведением, используя smack для создания небольшого XMPP-клиента/бота. Я установил соединение, а также ConnectionListener и ChatManagerListener. Это прекрасно работает, и я могу общаться со своим приложением, которое работает на переносном устройстве.

Чтобы проверить поведение при потере соединения, я отключил кабель Ethernet портативного устройства. Я ожидал, что клиент XMPP потеряет соединение и что пользователь будет отключен в списке друзей пользователей. Что происходит, так это то, что этот пользователь по-прежнему отображается как «онлайн», а ConnectionListener моего клиента ничего не запускает, будь то connectionClosed или reconnectionFailed или что-то еще.

Когда я снова подсоединяю кабель Ethernet, иногда мне кажется, что соединение было активным все время. Автономные сообщения обрабатываются, и я снова могу общаться в чате, как и раньше. В других случаях мой клиент полностью недоступен и не в порядке, кажется, что все слушатели ушли... Но никаких исключений не выдается.

Это довольно странное и неконтролируемое поведение, которое сделало бы весь клиент непригодным для меня, так как я не могу быть уверен, что клиент снова заработает после того, как соединение было прервано.

Кто-нибудь еще сталкивался с такими проблемами или есть намеки на то, что (не) происходит?

При необходимости я могу предоставить свой код, но на самом деле это просто копирование и вставка из документации Smack.

11
задан Flow 1 June 2012 в 06:53
поделиться