¿Cómo el componente externo de Openfire puede lidiar con la presencia y las suscripciones?

StackOverflow https://stackoverflow.com/questions/9431178

  •  12-11-2019
  •  | 
  •  

Pregunta

He creado un componente externo de Openfire basado en la biblioteca Whack ampliando la clase AbstractComponent.Quiero que los clientes se suscriban a mi componente y reciban notificaciones de presencia cuando el componente se conecte y desconecte.Entonces mi pregunta es ¿cómo podemos lidiar con la presencia y las suscripciones de presencia para componentes externos basados ​​en AbstractComponent?

Actualmente puedo responder a la solicitud de presencia utilizando el método handlePresence() pero ¿cómo debo agregar clientes a la lista de componentes (en primer lugar, los componentes externos permiten la lista)?

@Override
protected void handlePresence(Presence presence){
    if (presence.getType() ==  Presence.Type.subscribe){
        System.out.println("The component has received Subscribtion request.");
        Presence original =  presence;
        Presence response = new Presence();
        //Swap the sender/recipient fields
        response.setTo(original.getFrom());
        response.setFrom(original.getTo());
        //Convert the text to upper case
        response.setType(Presence.Type.subscribed);
        send(response);

    }
}
¿Fue útil?

Solución

Los componentes no tienen una lista proporcionada por el servidor.Puede almacenar su propia lista en una base de datos si es necesario.Algunas aplicaciones pueden funcionar sin ninguna lista (cuando simplemente quieren aparecer en línea para todos).

Para aparecer en línea para todos (el enfoque más simple, no se requiere almacenamiento en la lista):

  • Cuando recives <presence type="subscribe"/> responder con <presence type="subscribed"/>
  • Cuando recives <presence type="probe"/> responder con <presence/> (o cualquier estado en el que quieras que se muestre)

Almacenar una lista requiere un poco más de trabajo, pero le permite realizar un seguimiento de quién está autorizado a ver su presencia y de quién está usted autorizado a ver.En algunos casos, es posible que prefieras usar una conexión de cliente normal aquí, si no deseas administrar tu propia lista.Jack Moffitt escribió una publicación de blog sobre la idea aquí: http://metajack.im/2008/08/04/thinkts-on-scalable-xmpp-bots/

Tenga en cuenta que a lo largo de esta publicación omito los atributos 'hacia' y 'de' en las estrofas.Depende del componente poner un 'hasta' y un 'desde' en las estrofas salientes.Todas las estrofas entrantes tendrán un "hasta" y un "desde".

Mostrar la presencia de un componente a los usuarios

Las estrofas entrantes básicas que debes manejar son:

  • <presence type="subscribe">

    • El remitente quiere suscribirse a sus actualizaciones de presencia.Puede aprobarlo o rechazarlo.Si lo aprueba, debe almacenar el JID del remitente en su base de datos para saber que debe enviarles sus actualizaciones de presencia cuando sea necesario.
    • Especificación: http://xmpp.org/rfcs/rfc6121.html#sub-request-handle
  • <presence type="unsubscribe">

    • El remitente quiere dejar de recibir actualizaciones de presencia suyas.Debes eliminarlos de la lista de personas suscritas a tus actualizaciones y luego enviarlas de regreso. <presence type="unsubscribed"> y <presence type="unavailable">.
    • Especificación: http://xmpp.org/rfcs/rfc6121.html#sub-cancel-inbound (aunque aquí el texto está más dirigido a servidores que a componentes).
  • <presence type="probe">
    • El remitente solicita su presencia actual.Simplemente responda con su última estrofa de presencia para ese usuario.Normalmente, esto lo envía el servidor del usuario cuando inicia sesión.

Recibir presencia de usuarios en un componente.

Además, si desea que el componente conozca la presencia de usuarios, debe enviarles una solicitud de suscripción: <presence type="subscribe">.Debe estar preparado para recibir una aprobación (<presence type="subscribed">) o negación (<presence type="unsubscribed">).

Cuando el componente se conecta por primera vez, puede recuperar la presencia actual de un usuario enviando <presence type="probe"> a cada usuario.No es necesario hacer esto más de una vez por usuario mientras el componente se está ejecutando: el servidor del usuario le enviará automáticamente actualizaciones de presencia si el usuario aprobó su solicitud de suscripción como se indicó anteriormente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top