From a3f2623d7e89c49344e2cf6040912aafb388d9c3 Mon Sep 17 00:00:00 2001 From: heavyrian2012 Date: Wed, 23 Mar 2022 19:55:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86disconnect=E7=9A=84=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/moquette/persistence/MemorySessionStore.java | 2 ++ .../main/java/io/moquette/spi/impl/ProtocolProcessor.java | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java b/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java index dff5e2f3..da194422 100755 --- a/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java @@ -751,6 +751,7 @@ public class MemorySessionStore implements ISessionsStore { public void disableSession(String userId, String clientId) { Session session = sessions.get(clientId); if (session != null && session.getDeleted() == 0 && (userId == null || session.getUsername().equals(userId))) { + mServer.getProcessor().processOffline(session, false); databaseStore.updateSessionDeleted(session.getUsername(), clientId, 1); ConcurrentSkipListSet sessionSet = getUserSessionSet(session.username); sessionSet.remove(clientId); @@ -772,6 +773,7 @@ public class MemorySessionStore implements ISessionsStore { return; } + mServer.getProcessor().processOffline(session, true); ConcurrentSkipListSet sessionSet = getUserSessionSet(session.username); sessionSet.remove(clientID); diff --git a/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java b/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java index f8d61d08..47a647bc 100755 --- a/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java +++ b/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java @@ -620,15 +620,19 @@ public class ProtocolProcessor { String username = NettyUtils.userName(channel); MemorySessionStore.Session session = m_sessionsStore.getSession(clientID); if(session != null) { - session.refreshLastActiveTime(); - forwardOnlineStatusEvent(username, clientID, session.getPlatform(), clearSession ? UserOnlineStatus.LOGOUT : UserOnlineStatus.OFFLINE, session.getAppName()); + processOffline(session, clearSession); } ConnectionDescriptor oldConnDescr = new ConnectionDescriptor(clientID, channel); if(connectionDescriptors.removeConnection(oldConnDescr)) { m_interceptor.notifyClientConnectionLost(clientID, username); } + } + + public void processOffline(MemorySessionStore.Session session, boolean clearSession) { if(session != null) { + session.refreshLastActiveTime(); + forwardOnlineStatusEvent(session.getUsername(), session.getClientID(), session.getPlatform(), clearSession ? UserOnlineStatus.LOGOUT : UserOnlineStatus.OFFLINE, session.getAppName()); m_messagesStore.updateUserOnlineSetting(session, false); } }