Comment les composants externes OpenFire peuvent gérer la présence et les abonnements?

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

  •  12-11-2019
  •  | 
  •  

Question

J'ai construit un composant OpenFire externe basé sur la bibliothèque Whack en étendant la classe AbstractComponent. Je veux que les clients s'abonnent à mon composant et reçoivent des notifications de présence lorsque le composant se met en ligne et hors ligne. Ma question est donc de savoir comment nous pouvons gérer les abonnements de présence et de présence pour des composants externes en fonction de l'abstractComponent?

Actuellement, je peux répondre à la demande de présence en utilisant la méthode HandlePresence (), mais comment dois-je ajouter des clients à la liste des composants (les composants externes autorisent-ils la liste en premier lieu)?

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

    }
}
Était-ce utile?

La solution

Les composants n'ont pas de liste fournis par le serveur. Vous pouvez stocker votre propre liste dans une base de données si vous en avez besoin. Certaines applications peuvent s'en tirer sans aucune liste (quand elles veulent simplement apparaître en ligne à tout le monde).

Pour apparaître en ligne à tous (approche la plus simple, aucun stockage de liste requis):

  • Lorsque vous recevez <presence type="subscribe"/> répondre avec <presence type="subscribed"/>
  • Lorsque vous recevez <presence type="probe"/> répondre avec <presence/> (ou quel que soit le statut que vous souhaitez être montré)

Pour stocker une liste, il faut un peu plus de travail, mais vous permet de suivre qui est autorisé à voir votre présence et dont vous êtes autorisé à voir. Dans certains cas, vous préférez peut-être utiliser une connexion client normale ici, si vous ne souhaitez pas gérer votre propre liste. Jack Moffitt a écrit un article de blog sur l'idée ici: http://metajack.im/2008/08/04/thoughts-on-scalable-xmpp-bots/

Notez que tout au long de ce post, j'omet les attributs «à» et «à partir» des strophes. Il appartient au composant de mettre un «à» et «de» sur les strophes sortantes. Toutes les strophes entrants auront un «à» et «de».

Affichage de la présence d'un composant aux utilisateurs

Les strophes entrants de base que vous devez gérer sont:

  • <presence type="subscribe">

    • L'expéditeur souhaite s'abonner à vos mises à jour de présence. Vous pouvez soit l'approuver ou le refuser. Si vous approuvez, vous devez stocker le jid de l'expéditeur dans votre base de données afin que vous sachiez que vous devez leur envoyer vos mises à jour de présence lorsque cela est nécessaire.
    • Spécification: http://xmp.org/rfcs/rfc6121.html#sub-request-handle
  • <presence type="unsubscribe">

    • L'expéditeur veut arrêter de recevoir des mises à jour de présence de votre part. Vous devez les supprimer de la liste des personnes abonnées à vos mises à jour, puis renvoyer <presence type="unsubscribed"> et <presence type="unavailable">.
    • Spécification: http://xmp.org/rfcs/rfc6121.html#sub-cancel-inbound (Bien que le texte soit plus adapté aux serveurs que dans les composants ici).
  • <presence type="probe">
    • L'expéditeur demande votre présence actuelle. Répondez simplement avec votre dernière strophe de présence pour cet utilisateur. Ceci est généralement envoyé par le serveur de l'utilisateur lorsqu'il se connecte.

Recevoir la présence d'utilisateurs dans un composant

De plus, si vous souhaitez que le composant connaisse la présence d'utilisateurs, vous devez leur envoyer une demande d'abonnement: <presence type="subscribe">. Vous devez être prêt à recevoir soit une approbation (<presence type="subscribed">) ou déni (<presence type="unsubscribed">).

Lorsque le composant est mis en ligne pour la première fois, il peut récupérer la présence actuelle pour un utilisateur en envoyant <presence type="probe"> à chaque utilisateur. Il n'est pas nécessaire de le faire plus d'une fois par utilisateur pendant l'exécution du composant - le serveur de l'utilisateur vous enverra automatiquement des mises à jour de présence si l'utilisateur a approuvé votre demande d'abonnement comme ci-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top