From 90c8e4980844e76a474bb8e7a07b12f7d9705b0c Mon Sep 17 00:00:00 2001 From: heavyrain lee Date: Thu, 25 Apr 2019 08:15:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E9=87=8D=E5=90=AF=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95=E6=97=B6=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E7=94=A8=E6=88=B7session?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/MemorySessionStore.java | 17 ++++++++++++++--- .../java/io/moquette/spi/ISessionsStore.java | 2 ++ .../io/moquette/spi/impl/ProtocolProcessor.java | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java b/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java index 6b0abc1d..0d0b9fc6 100755 --- a/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java @@ -368,10 +368,21 @@ public class MemorySessionStore implements ISessionsStore { } Session session = sessions.get(clientID); - ClientSession clientSession = new ClientSession(clientID, this); - return clientSession; + + return session.getClientSession(); } - + + @Override + public void loadUserSession(String username, String clientID) { + if (sessions.containsKey(clientID)) { + return; + } + Session session = databaseStore.getSession(username, clientID, new ClientSession(clientID, this)); + if (session != null) { + sessions.put(clientID, session); + } + } + @Override public Collection sessionForUser(String username) { ConcurrentSkipListSet sessionSet = userSessions.get(username); diff --git a/broker/src/main/java/io/moquette/spi/ISessionsStore.java b/broker/src/main/java/io/moquette/spi/ISessionsStore.java index d163a0f4..46fd9d9c 100755 --- a/broker/src/main/java/io/moquette/spi/ISessionsStore.java +++ b/broker/src/main/java/io/moquette/spi/ISessionsStore.java @@ -57,6 +57,8 @@ public interface ISessionsStore { Session sessionForClientAndUser(String username, String clientID); ClientSession sessionForClient(String clientID); + + void loadUserSession(String username, String clientID); Collection sessionForUser(String username); 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 a2940cb6..f6f6e7d2 100755 --- a/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java +++ b/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java @@ -343,7 +343,7 @@ public class ProtocolProcessor { return null; } - + m_sessionsStore.loadUserSession(username, clientId); ClientSession clientSession = m_sessionsStore.sessionForClient(clientId); boolean isSessionAlreadyStored = clientSession != null; if (isSessionAlreadyStored) {