2015-09-24 2 views
2

Я пытаюсь присоединиться к MultiUserChat, используя Smack на Android. В настоящее время я могу прекрасно общаться с 1-на-1, и я подключаюсь к серверу, пока я показываю его онлайн. Я следовал приведенным примерам here.Android Smack дает timeoutexception при подключении MultiUserChat

У меня есть следующий код, чтобы присоединиться к MultiUserChat (MUC).

final XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() 
     .setUsernameAndPassword(user.getUsername(), user.getJabberPassword()) 
     .setServiceName("app.buur.nu") 
     .setHost("app.buur.nu") 
     .setPort(5222) 
     .build(); 

AbstractXMPPConnection connection = new XMPPTCPConnection(config); 

String room = "testroom"; 
MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection); 
MultiUserChat muc = manager.getMultiUserChat(room + "@groups.app.buur.nu"); 
try { 
    muc.join(user.getUsername(), null, null, connection.getPacketReplyTimeout()); 
} catch (SmackException.NoResponseException e) { 
    e.printStackTrace(); 
} catch (XMPPException.XMPPErrorException e) { 
    e.printStackTrace(); 
} catch (SmackException.NotConnectedException e) { 
    e.printStackTrace(); 
} 

Но это дает мне org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 5000ms (~5s). Used filter: AndFilter: (FromMatchesFilter (full): [email protected]/test, StanzaTypeFilter: org.jivesoftware.smack.packet.Presence).

Я пытался увеличить время ожидания до 10000 мс, но я все еще получаю тайм-аут. Что здесь может быть не так? Создание 1-на-1 чатов работает отлично и connection.isConnected()) возвращает значение ИСТИНА ...


Так получается, что я получаю ошибку

<presence to="app.buur.nu/7c65be6" id="lgcSp-4" type="error"><x xmlns="http://jabber.org/protocol/muc"/><c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.igniterealtime.org/projects/smack" ver="os2Kusj3WEOivn5n4iFr/ZEO8ls="/><error code="401" type="auth"><not-authorized xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></presence>

В принципе, аутентификация не завершена, когда я Я пытаюсь войти в комнату. Можно ли добавить слушателя для получения обновления после завершения проверки подлинности? Я видел https://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware/smack/SASLAuthentication.html#authenticate%28java.lang.String,%20javax.security.auth.callback.CallbackHandler%29, но реализация моего собственного механизма аутентификации кажется немного переполненным ...

Нет ли onAuthenticationCompletedListener или что-то в этом роде?

+0

След строфы был бы проницательным. Посмотрите на https://github.com/igniterealtime/Smack/wiki/How-to-ask-for-help,-report-an-issue-and-possible-solve-the-problem-yourself – Flow

+0

@Flow будет update my post – Gooey

+0

Присутствие отсутствует атрибут 'from'. Какая реализация предоставляет услугу MUC? – Flow

ответ

1

Оказывается, нет необходимости осуществлять SASLMechanism, вы можете сделать следующее:

connection.addConnectionListener(new ConnectionListener() { 
     @Override 
     public void connected(XMPPConnection connection) { 

     } 

     @Override 
     public void authenticated(XMPPConnection connection, boolean resumed) { 
      joinMUCRooms(); 
     } 

     @Override 
     public void connectionClosed() { 

     } 

     @Override 
     public void connectionClosedOnError(Exception e) { 

     } 

     @Override 
     public void reconnectionSuccessful() { 

     } 

     @Override 
     public void reconnectingIn(int seconds) { 

     } 

     @Override 
     public void reconnectionFailed(Exception e) { 

     } 
    }); 

ошибка больше не показывает сейчас, сохраняя при этом код «достаточно» чистый.

+0

Я сделал то же, что вы сказали выше, но все равно получал то же исключение. Что-нибудь еще, что я могу сделать, чтобы решить проблему? –

0

Существует ли комната? Если нет, то сначала нужно создать его, используя create() и отправку мгновенной формы. Вы также должны сообщать разработчикам openfire, что присутствие ошибки MUC не имеет атрибута «from».