2012-02-15 15 views
5

Soy un nuevo usuario en la pila, pero tengo un problema con MultiUserChat en la biblioteca aSmack 3.2.1 para android. Estoy usando el servidor "gtalk.google.com". Es un ejemplo sencillo y Soy sólo uno de cada habitación:XMPP aSmack El servidor MultiUserChat continúa enviando mensajes ya recibidos

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

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

Después:

muc.sendMessage("Text message"); 

A petición:

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> 

Resultado: "Mensaje de texto" y es justo, pero luego:

Recibí nuevamente "Mensaje de texto" con presencias:

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> 

Y lo recibí una y otra vez cada vez que el servidor me envía presencias. Continúa infinitamente con intervalo ~ 5 minutos. Y sí, en 30 minutos recibí ~ 6 mensajes "Mensaje de texto". Si envío más de 1 mensaje, todos estos mensajes se recibirán sin excepciones cuando me envíen la presencia.

¿Qué problema hay con mi MultiUserChat y qué demora en la entrega está haciendo aquí?

¡Gracias por la atención!

+0

interesante, todo lo que puedo añadir es que [el estado código 101] (http://xmpp.org/registrar/mucstatus.html) significa "cambio de afiliación para la combinación MUC/usuario" – Flow

+0

Flujo, gracias por sus comentarios. Pero hay un código de estado 110 no 101. El código de estado 110 significa que el envío de presencia es verdadero. – nizhney

+1

IIRC, este es un comportamiento extraño en google talk, donde retransmiten tu presencia a intervalos, lo que causa rareza en la sala. – Zash

Respuesta

3

En el caso de "@ conference.jabber.org" no encontré la solución y decidí ese problema debido al servidor GTalk y la versión correcta de MultiUserChat es en el caso de "@ groupchat.google.com".

he cambiado de código de:

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)); 

Y lo intenté, pero me dio nueva de problemas Cuando el usuario Recieve mensaje de invitación y aceptar que tanto los clientes chocan con XmlPullException "END_TAG esperado" y algo así como "</stream: stream>" en la última posición en logcat.

Empecé a buscar en Google este problema y encontré la razón. Usé Asmack del cliente Beem (por cierto, antes de eso usé asmack-7 del desarrollador asmack) y cómo sé que está basado en smack 3.1 ... Descubrí que smack 3.2.0 decidió este problema. Descargué el Flow's version de asmack y estoy satisfecho con esto.

En conclusión, quiero decir "¡Gracias!" Flow para la versión correcta de aSmack, que funciona mejor que otros.

+0

Me alegro de poder ayudar. No olvide invitar a la [respuesta original] (http://stackoverflow.com/a/5487854/194894) que trato de mantener actualizada. – Flow

1

que no se debe a su cliente, y eso no es un error, eso es porque de GroupChat Ajustes de perfil proyectadas de su servidor para enviar particular, Número de historial de chat Al entrar en la habitación

+0

¿me puede dar más detalles sobre cómo resolver el problema? – Moes

+0

¿Está utilizando el servidor OpenFire? – dasdas

Cuestiones relacionadas