2012-02-15 12 views
5

Sono un nuovo utente sullo stack, ma ho un problema con MultiUserChat nella libreria aSmack 3.2.1 per Android. Sto utilizzando il server "gtalk.google.com". E 'un esempio semplice e I'am sola in camera:XMPP aSmack MultiUserChat server continua a inviare messaggi già ricevuti

String room="[email protected]"; 
MultiUserChat muc = new MultiUserChat(connection,room); 
muc.join(userNameInRoom); 

muc.addMessageListener(new PacketListener() 
{ 
    @Override 
    public void processPacket(Packet packet) 
    { 
     ... 
    } 
}); 

Dopo:

muc.sendMessage("Text message"); 

In Log:

DEBUG/SMACK(281): 06:46:29 PM SENT (1140866576): <message id="gsMe7-18" 
to="[email protected]" type="groupchat"><body>Text message 
</body></message> 

DEBUG/SMACK(281): 06:46:29 PM RCV (1140866576): <message 
from="[email protected]/userNameInRoom" to="userName" 
type="groupchat"><body>Text message</body></message> 

Risultato: "Messaggio di testo" ed è giusto, ma poi:

Ho ricevuto nuovamente "Messaggio di testo" con presenze:

DEBUG/SMACK(281): 06:54:12 PM RCV (1140866576): <presence 
from="[email protected]/userNameInRoom" to="userName"><x xmlns= 
"vcard-temp:x:update"><photo/></x><x xmlns="http://jabber.org/protocol/muc#user"> 
<item affiliation="owner" role="moderator"/><status code="110"/></x></presence> 

DEBUG/SMACK(281): 06:54:12 PM RCV (1140866576): <message 
from="[email protected]/userNameInRoom" to="userName" 
type="groupchat"><body>Text message</body><delay stamp="2012-02-15T17:46:31Z" 
from="[email protected]" xmlns="urn:xmpp:delay"/><x 
stamp="20120215T17:46:31" from="[email protected]" 
xmlns="jabber:x:delay"/></message> 

E l'ho ricevuto ancora e ancora ogni volta che il server invia presenze a me. Continua all'infinito con intervallo ~ 5 minuti. E sì in 30 minuti ho ricevuto ~ 6 messaggi "SMS". Se invio più di 1 messaggio, tutti questi messaggi verranno ricevuti senza eccezioni quando la presenza viene inviata a me.

Quale problema con il mio MultiUserChat e quali sono le consegne ritardate?

Grazie per l'attenzione!

+0

Interessante, tutto quello che posso aggiungere è che [lo stato codice 101] (http://xmpp.org/registrar/mucstatus.html) significa "cambio di affiliazione per la combinazione MUC/utente" – Flow

+0

Flow, grazie per il commento. Ma c'è il codice di stato 110 e non 101. Il codice di stato 110 indica che l'invio di presenza è vero. – nizhney

+1

IIRC, questo è un comportamento strano in google talk, in cui ri-trasmettono la tua presenza a intervalli, che provoca stranezze con la stanza. – Zash

risposta

3

In caso di "@ conference.jabber.org" non ho trovato la soluzione e ho deciso che il problema a causa del server GTalk e della versione corretta di MultiUserChat è nel caso di "@ groupchat.google.com".

ho cambiato il mio codice:

room=roomName+"@conference.jabber.org"; 
MultiUserChat muc = new MultiUserChat(connection, room); 

muc.create(userName); 

muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT)); 

a:

room="private-chat-" + UUID.randomUUID().toString() + "@groupchat.google.com"; 
MultiUserChat muc = new MultiUserChat(connection, room); 

muc.join(userName); 

muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT)); 

E ho provato, ma ho ottenuto nuova problema- Quando l'utente Ricevere invitano messaggio e lo accetto sia per clienti in crash con XmlPullException "END_TAG atteso" e qualcosa come "</stream: stream>" nell'ultima posizione in logcat.

Ho iniziato a cercare su Google questo problema e ho trovato motivo. Ho usato asmack da beem client (a proposito, prima ho usato asmack-7 dallo sviluppatore asmack) e come so che si basa su smack 3.1 ... ho scoperto che lo smack 3.2.0 ha deciso questo problema. Ho scaricato il Flow's version di asmack e sono soddisfatto di questo.

In conclusione, voglio dire "Grazie !!!" Flusso per la versione corretta di aSmack, che funziona meglio di altri.

+0

Contento di aver potuto aiutare. Non dimenticare di modificare la [risposta originale] (http://stackoverflow.com/a/5487854/194894) che tento di tenere aggiornato. – Flow

1

che non è a causa del vostro cliente, e quello non è un errore, thats perché di chat di gruppo Impostazioni di storia configurato del vostro server per inviare numero particolare di Chat History entrando nella stanza

+0

puoi fornire ulteriori dettagli su come risolvere il problema? – Moes

+0

stai usando il server OpenFire? – dasdas

Problemi correlati