如果我不清楚你的问题,请纠正我。 你检查接口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时添加所需的任何操作。
你能解释一下你的情况吗?就像你想处理任何用户的离线消息一样? –