如何在Openfire插件中添加离线事件处理?

时间:2017-01-04 09:26:36

标签: java event-handling openfire

我是java新手。我需要在Openfire插件中处理脱机会话。从插件开发文档我能够理解基础知识,但我不知道如何处理openfire的离线事件。 有一个类" SessionEventDispatcher"在包org.jivesoftware.openfire.event

我们有以下预定义事件:

session_created
session_destroyed
anonymous_session_created
anonymous_session_destroyed
resource_bound

然后这些事件具有监听器,该监听器在Presence插件中实现。 如果我还需要添加离线活动,请帮助我了解如何继续。

我正在使用redis保存在线用户,但有些人认为openfire中的用户会话比redis中的用户少,这意味着我没有处理插件中的某些离线事件,因为创建了哪个用户会话并以redis添加,但是用户会话没有明确关闭,这是为了从redis中删除而处理的,我遇到了这种差异。

1 个答案:

答案 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时,日志将是: =======会话无法使用========= 2017.03.29 14:27:34 .CustomPresenceEventListener - USER:25

2017.03.29 14:27:34 .CustomPresenceEventListener -

因此,您可以在用户进入/离开Openfire时添加您想要的任何操作。