Frage

Ich habe eine externe OpenFire-Komponente basierend auf der Whack-Bibliothek erstellt, indem ich die AbstractComponent-Klasse erweitert habe.Ich möchte, dass Kunden meine Komponente abonnieren und Anwesenheitsbenachrichtigungen erhalten, wenn die Komponente online und offline geht.Meine Frage ist also, wie wir mit Präsenz und Präsenzabonnements für externe Komponenten basierend auf AbstractComponent umgehen können.

Derzeit kann ich auf die Anwesenheitsanfrage mit der Methode handlePresence() reagieren, aber wie soll ich Clients zur Komponentenliste hinzufügen (erlauben externe Komponenten überhaupt eine Liste)?

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

    }
}
War es hilfreich?

Lösung

Für Komponenten wird vom Server kein Dienstplan bereitgestellt.Bei Bedarf können Sie Ihren eigenen Dienstplan in einer Datenbank speichern.Manche Bewerbungen können ohne Dienstplan auskommen (wenn sie einfach nur für alle online sichtbar sein wollen).

Um online für alle sichtbar zu sein (einfachster Ansatz, keine Dienstplanspeicherung erforderlich):

  • Wenn Sie empfangen <presence type="subscribe"/> antworte mit <presence type="subscribed"/>
  • Wenn Sie empfangen <presence type="probe"/> antworte mit <presence/> (oder welcher Status auch immer Sie angezeigt werden möchten)

Das Speichern eines Dienstplans erfordert etwas mehr Arbeit, ermöglicht Ihnen aber den Überblick darüber, wer berechtigt ist, Ihre Anwesenheit zu sehen, und wessen Anwesenheit Sie sehen dürfen.In manchen Fällen möchten Sie hier möglicherweise lieber eine normale Client-Verbindung verwenden, wenn Sie Ihren Dienstplan nicht selbst verwalten möchten.Jack Moffitt hat hier einen Blogbeitrag zu dieser Idee geschrieben: http://metajack.im/2008/08/04/thoughts-on-scalable-xmpp-bots/

Beachten Sie, dass ich in diesem Beitrag die Attribute „to“ und „from“ in Strophen weglasse.Es liegt an der Komponente, ausgehende Strophen mit einem „bis“ und einem „von“ zu versehen.Alle eingehenden Strophen haben ein „bis“ und ein „von“.

Anzeigen der Anwesenheit einer Komponente für Benutzer

Die grundlegenden eingehenden Strophen, die Sie verarbeiten müssen, sind:

  • <presence type="subscribe">

    • Der Absender möchte Ihre Anwesenheitsaktualisierungen abonnieren.Sie können dies entweder genehmigen oder ablehnen.Wenn Sie zustimmen, sollten Sie die JID des Absenders in Ihrer Datenbank speichern, damit Sie wissen, dass Sie ihm bei Bedarf Ihre Anwesenheitsaktualisierungen senden müssen.
    • Spezifikation: http://xmpp.org/rfcs/rfc6121.html#sub-request-handle
  • <presence type="unsubscribe">

    • Der Absender möchte keine Anwesenheitsaktualisierungen mehr von Ihnen erhalten.Sie sollten sie aus der Liste der Personen entfernen, die Ihre Updates abonniert haben, und sie dann zurücksenden <presence type="unsubscribed"> Und <presence type="unavailable">.
    • Spezifikation: http://xmpp.org/rfcs/rfc6121.html#sub-cancel-inbound (obwohl der Text hier eher auf Server als auf Komponenten zugeschnitten ist).
  • <presence type="probe">
    • Der Absender fragt nach Ihrer aktuellen Anwesenheit.Antworten Sie einfach mit Ihrer neuesten Präsenzstrophe für diesen Benutzer.Dies wird normalerweise vom Server des Benutzers gesendet, wenn er sich anmeldet.

Empfangen der Anwesenheit von Benutzern in einer Komponente

Wenn Sie möchten, dass die Komponente außerdem die Anwesenheit von Benutzern erkennt, müssen Sie ihnen eine Abonnementanfrage senden: <presence type="subscribe">.Sie sollten darauf vorbereitet sein, entweder eine Genehmigung (<presence type="subscribed">) oder Verleugnung (<presence type="unsubscribed">).

Wenn die Komponente zum ersten Mal online geht, kann sie durch Senden die aktuelle Präsenz für einen Benutzer abrufen <presence type="probe"> für jeden Benutzer.Dies ist nicht mehr als einmal pro Benutzer erforderlich, während die Komponente ausgeführt wird. Der Server des Benutzers sendet Ihnen automatisch Anwesenheitsaktualisierungen, wenn der Benutzer Ihre Abonnementanfrage wie oben genehmigt hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top