2017-01-04 3 views
0

Ich bin Java-Neuling. Ich muss Offline-Sitzungen im Openfire-Plugin behandeln. Von Plugin-Entwicklung Doc bin ich in der Lage, die Grundlagen zu verstehen, aber ich bekomme nicht, wie ich Offline-Ereignis von openfire behandeln kann. Es gibt eine Klasse „SessionEventDispatcher“ in Paket org.jivesoftware.openfire.eventWie fügt man Offline-Ereignisbehandlung im Openfire-Plugin hinzu?

Dort haben wir vordefinierte Ereignisse folgende:

session_created 
session_destroyed 
anonymous_session_created 
anonymous_session_destroyed 
resource_bound 

Diese Ereignisse dann Zuhörer haben, die in Gegenwart Plugin implementiert ist. Bitte helfen Sie mir zu verstehen, wie Sie vorgehen, wenn ich auch Offline-Event hinzufügen müssen.

Ich speichere Online-Benutzer in Redis, aber einige, wie Benutzersitzungen in Openfire ist weniger als Benutzer in Redis, was bedeutet, dass ich nicht einige Offline-Ereignis in meinem Plugin behandeln, aufgrund der Benutzersitzung erstellt und in Redis hinzugefügt wird, aber Benutzersitzung ist nicht explizit geschlossen, die behandelt wird, um von redis zu entfernen, und ich stehe vor dieser Diskrepanz.

+0

Können Sie Ihr Szenario für ein besseres Verständnis erklären? wie wenn Sie offline Nachrichten für jeden Benutzer behandeln möchten? –

Antwort

0

bitte korrigieren Sie mich, wenn ich deutlich verstehe Ihre Frage `t. Haben Sie Schnittstelle org.jivesoftware.openfire.user.PresenceEventListener untersuchen? Zum Beispiel habe ich diese Schnittstelle implementieren:

public class CustomPresenceEventListener implements PresenceEventListener { 

private static final Logger LOG = LoggerFactory.getLogger(CustomPresenceEventListener.class); 

@Override 
public void availableSession(ClientSession session, Presence presence) { 
    LOG.info("\n\n=======SESSION AVAILABLE=========\n"); 
    try { 
     LOG.info("USER : {}", session.getUsername()); 
    } catch (UserNotFoundException e) { 
     LOG.info(e.getMessage(), e); 
    } 
    LOG.info("\n================\n\n"); 
} 

@Override 
public void unavailableSession(ClientSession session, Presence presence) { 
    LOG.info("\n\n=======SESSION UNAVAILABLE=========\n"); 
    try { 
     LOG.info("USER : {}", session.getUsername()); 
    } catch (UserNotFoundException e) { 
     LOG.info(e.getMessage(), e); 
    } 
    LOG.info("\n================\n\n"); 
} 

@Override 
public void presenceChanged(ClientSession session, Presence presence) { 
} 

@Override 
public void subscribedToPresence(JID subscriberJID, JID authorizerJID) { 

} 

@Override 
public void unsubscribedToPresence(JID unsubscriberJID, JID recipientJID) { 

} 

Und hinzufügen/entfernen diese Hörer mit:

PresenceEventDispatcher.addListener(presenceEventListener); 
PresenceEventDispatcher.removeListener(presenceEventListener); 

Und wenn ich zu Openfire verbinden werde ich in der Datei info.log so ähnlich sehen: ======= ========= Sitzung verfügbar 2017.03.29 14.27.01 .CustomPresenceEventListener - USER: 25

2017.03.29 14:27:01 .CustomPresenceEventListener -

Und wenn ich gehe Openfire-Protokolle werden: ======= ========= Sitzung nicht zur Verfügung 2017.03.29 14.27.34 .CustomPresenceEventListener - USER: 25

2017.03.29 14.27.34 .CustomPresenceEventListener - So

Sie eine Aktion hinzufügen, könnten Sie wollen, wenn der Benutzer eingeben/verlassen Openfire.

Verwandte Themen