From 9b0ca7ac3cbb138e89920450c75337bad831edac Mon Sep 17 00:00:00 2001 From: heavyrain2012 Date: Mon, 4 Jan 2021 15:27:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=9F=90=E4=BA=9B=E7=89=B9?= =?UTF-8?q?=E6=AE=8A=E6=83=85=E5=86=B5=E4=B8=8B=E7=94=A8=E6=88=B7session?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/MemorySessionStore.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java b/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java index d407760e..e715d166 100755 --- a/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java @@ -349,18 +349,22 @@ public class MemorySessionStore implements ISessionsStore { Session session = sessions.get(clientID); if (session != null && !session.username.equals(username)) { - if (userSessions.get(username) != null) { - userSessions.get(username).remove(clientID); + if (userSessions.get(session.username) != null) { + userSessions.get(session.username).remove(clientID); } + session = null; } ClientSession clientSession = new ClientSession(clientID, this); - session = databaseStore.getSession(username, clientID, clientSession); - - if (session == null) { - session = databaseStore.createSession(username, clientID, clientSession, platform); + if(session == null) { + session = databaseStore.getSession(username, clientID, clientSession); + if (session == null) { + session = databaseStore.createSession(username, clientID, clientSession, platform); + } } - sessions.put(clientID, session); + sessions.put(clientID, session); + ConcurrentSkipListSet sessionSet = getUserSessionSet(username); + sessionSet.add(clientID); if (session.getDeleted() > 0) { session.setDeleted(0); @@ -462,7 +466,6 @@ public class MemorySessionStore implements ISessionsStore { session.setUsername(username); sessions.put(clientID, session); - ConcurrentSkipListSet sessionSet = getUserSessionSet(username); sessionSet.add(clientID); @@ -501,11 +504,15 @@ public class MemorySessionStore implements ISessionsStore { @Override public void loadUserSession(String username, String clientID) { if (sessions.containsKey(clientID)) { + ConcurrentSkipListSet sessionSet = getUserSessionSet(username); + sessionSet.add(clientID); return; } Session session = databaseStore.getSession(username, clientID, new ClientSession(clientID, this)); if (session != null) { sessions.put(clientID, session); + ConcurrentSkipListSet sessionSet = getUserSessionSet(username); + sessionSet.add(clientID); } }