2017-01-04 7 views
0

Я java новичок. Мне нужно обрабатывать автономные сеансы в плагине Openfire. Из документа разработки плагинов я могу понять основы, но я не понимаю, как я могу обрабатывать офлайн-событие openfire. Существует класс «SessionEventDispatcher» в пакете org.jivesoftware.openfire.eventКак добавить автономную обработку событий в плагин Openfire?

Там мы имеем следующие предопределенные события:

session_created 
session_destroyed 
anonymous_session_created 
anonymous_session_destroyed 
resource_bound 

Эти события, то есть слушатель, который реализуется в плагине Presence. Пожалуйста, помогите мне понять, как действовать, если мне нужно добавить офлайн-событие.

Я экономлю онлайн-пользователей в redis, но некоторые, как пользовательские сессии в openfire меньше, чем пользователи в redis, что означает, что я не обрабатываю какое-то офлайн-событие в своем плагине, из-за которого создается пользовательский сеанс и добавляется в redis, но пользовательский сеанс не закрывается явно, который обрабатывается, чтобы получить удаление из redis, и я столкнулся с этим несоответствием.

+0

Можете ли вы объяснить свой сценарий для лучшего понимания? например, если вы хотите обрабатывать автономные сообщения для любого пользователя? –

ответ

0

, пожалуйста, поправьте меня, если я не буду четко понимать ваш вопрос. Вы изучаете интерфейс org.jivesoftware.openfire.user.PresenceEventListener? Например, я реализовать этот интерфейс:

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) { 

} 

И добавить/удалить этот приемник с:

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

И когда я подключаюсь к Openfire я буду видеть в файле info.log что-то вроде этого: ======= СЕССИЯ ДОСТУПНЫ ========= 2017.03.29 14:27:01 .CustomPresenceEventListener - USER: 25

2017.03.29 14:27:01 .CustomPresenceEventListener -

И когда я покину журналы OpenFire будет: ======= SESSION UNAVAILABLE ========= 2017.03.29 14:27:34 .CustomPresenceEventListener - USER: 25

2017.03.29 14:27:34 .CustomPresenceEventListener -

Таким образом, вы можете добавить любое действие, которое вы хотите, когда пользователь вводит/покидает Openfire.