2017-01-04 33 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時添加所需的任何操作。