php google-talk xmpphp

Estado de XMPPHP GTalk



google-talk (2)

Estoy tratando de obtener mi estado en línea usando XMPPHP y parece que no puedo obtener nada que tenga mi estado de $conn . Aquí hay un fragmento de mi código:

require_once(''XMPPHP/XMPP.php''); $conn = new XMPPHP_XMPP(''talk.google.com'', 5222, ''[email protected]'', ''xxxxx'', ''xmpphp'', ''gmail.com'', $printlog = false, $loglevel = XMPPHP_Log::LEVEL_INFO); $conn->connect(); $conn->processUntil(''session_start''); $conn->presence($status=''Controller available.''); var_dump($conn); // this gives me a long output but nothing about status. ex: http://pastebin.com/yfs1V5Jb

También probé getRoster() para ver una lista de la información de mi amigo (aunque solo me interesa la mía) pero no tuve suerte.

¿Alguna sugerencia de cómo puedo hacer que esto funcione? Gracias.


Debería poder solicitar su propia presencia pasando su propio jid ([email protected]) a getPresence ();

Por ejemplo:

$status = $conn->roster->getPresence($jid); var_dump($status); // Make sure you are retrieving a populated presence array echo $status[''show'']; // available,unavailable,dnd echo $status[''status'']; //status message

Hace bastante tiempo me encontré con un problema con esta biblioteca que no llenaba los registros de la lista. Si se encuentra con este problema, debe aplicar el parche que se detalla aquí: https://code.google.com/p/xmpphp/issues/detail?id=44&q=empty


He estado lidiando con este problema durante los últimos 2 días, y finalmente he descubierto un truco para que las cosas funcionen. Lo estoy documentando aquí, porque esta fue la pregunta de desbordamiento de pila que apareció con mayor frecuencia para mí mientras buscaba respuestas.

El método $ conn-> presence () no solo envía su información de presencia al servidor; También recopila información de presencia para cada contacto del servidor. El problema fundamental es que cuando envía el comando $ conn-> presence (), tiene que darle tiempo al script para recibir y procesar esta información desde el servidor. Todos los scripts de ejemplo usan $ conn-> processUntil (''presencia'') para hacer esto, pero por alguna razón, para mí, no se detuvo el tiempo suficiente para obtener toda la información de la lista.

Para solucionar esto, finalmente usé $ conn-> processTime (2), lo que obligó a las cosas a esperar 2 segundos antes de continuar. Esto es lo suficientemente bueno para mis propósitos, pero es claramente un truco. Entonces usando tu código como ejemplo:

require_once(''XMPPHP/XMPP.php''); $conn = new XMPPHP_XMPP(''talk.google.com'', 5222, ''[email protected]'', ''xxxxx'', ''xmpphp'', ''gmail.com'', $printlog = true, $loglevel = XMPPHP_Log::LEVEL_VERBOSE); $conn->connect(); $conn->processUntil(''session_start''); $conn->presence($status=''Controller available.''); $conn->processTime(2); // now see the results $roster = $conn->roster->getRoster(); print_r($roster); // you should now see roster array with presence info for each contact

Para responder a su pregunta más específicamente, puede usar lo siguiente en lugar del código en "ahora vea los resultados":

$my_jid = ''[email protected]''; // put your jid here $status = $conn->roster->getPresence($my_jid); echo $status[''show''];

Eso mostrará el estado en línea del jid que proporcione.

Tenga en cuenta que en este ejemplo también cambié el constructor para mostrar el registro más detallado posible. Esto fue clave para ayudarme a trabajar a través de esto.

Obviamente, una mejor solución sería agregar un comando $ conn-> processUntil (''lista'') al marco, o algo así. Pero como el marco no se ha actualizado en 5 años, es poco probable que suceda.

Esperemos que esto le ahorre a alguien las horas que perdí tratando de resolverlo. Aclamaciones.