From 5e92735e2746efba9a79113286981a91d90bdb6c Mon Sep 17 00:00:00 2001 From: imhao183 Date: Thu, 20 Feb 2020 15:15:59 +0800 Subject: [PATCH] update --- .../persistence/MemoryMessagesStore.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 94f8071c..edcb126e 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -2624,6 +2624,19 @@ public class MemoryMessagesStore implements IMessagesStore { return ErrorCode.ERROR_CODE_SUCCESS; } + private Collection getChannelListener(String channelId) { + HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); + MultiMap listeners = hzInstance.getMultiMap(CHANNEL_LISTENERS); + Collection result = listeners.get(channelId); + if (result.isEmpty()) { + result = databaseStore.getChannelListener(channelId); + for (String userId : result) { + listeners.put(channelId, userId); + } + } + return result; + } + @Override public WFCMessage.ChannelInfo getChannelInfo(String channelId) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); @@ -2633,12 +2646,12 @@ public class MemoryMessagesStore implements IMessagesStore { @Override public boolean checkUserInChannel(String user, String channelId) { - MultiMap chatroomMembers = m_Server.getHazelcastInstance().getMultiMap(CHANNEL_LISTENERS); + Collection chatroomMembers = getChannelListener(channelId); if (chatroomMembers == null) { return false; } - if(!chatroomMembers.containsEntry(channelId, user)) { + if(!chatroomMembers.contains(user)) { IMap mIMap = m_Server.getHazelcastInstance().getMap(CHANNELS); WFCMessage.ChannelInfo info = mIMap.get(channelId); if (info == null || !info.getOwner().equals(user)) {