2017-01-04 34 views
0

我是java新手。我需要在Openfire插件中处理脱机会话。从插件开发文档我能够理解基础知识,但我没有得到如何处理openfire的脱机事件。 有封装org.jivesoftware.openfire.event如何在Openfire插件中添加离线事件处理?

还有一类“SessionEventDispatcher”,我们有以下预定义事件:

session_created 
session_destroyed 
anonymous_session_created 
anonymous_session_destroyed 
resource_bound 

这些事件再有监听器,它的存在插件来实现。 如果我还需要添加脱机事件,请帮助我了解如何继续。

我在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年3月29日14时27分01秒.CustomPresenceEventListener - USER:25

2017年3月29日14时27分01秒.CustomPresenceEventListener -

当我离开的Openfire日志将是: ======= SESSION UNAVAILABLE ========= 2017年3月29日14点27分34秒.CustomPresenceEventListener - USER:25

2017.03.29 14:27:34 .CustomPresenceEventListener -

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