diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 82df6375..cd8cb2ba 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -780,6 +780,15 @@ public class MemoryMessagesStore implements IMessagesStore { return builder.build(); } + public void clearChatroomMembers(String chatroomId) { + MultiMap chatroomMembers = m_Server.getHazelcastInstance().getMultiMap(CHATROOM_MEMBER_IDS); + IMap userChatroomMap = m_Server.getHazelcastInstance().getMap(USER_CHATROOM); + chatroomMembers.get(chatroomId).forEach(userClientEntry -> { + userChatroomMap.remove(userClientEntry.userId); + }); + chatroomMembers.remove(chatroomId); + } + @Override public Collection getChatroomMembers(String chatroomId) { MultiMap chatroomMembers = m_Server.getHazelcastInstance().getMultiMap(CHATROOM_MEMBER_IDS); @@ -2573,6 +2582,7 @@ public class MemoryMessagesStore implements IMessagesStore { IMap chatroomInfoMap = hzInstance.getMap(CHATROOMS); WFCMessage.ChatroomInfo room = chatroomInfoMap.get(chatroomId); if (room != null) { + clearChatroomMembers(chatroomId); room = room.toBuilder().setUpdateDt(System.currentTimeMillis()).setState(ProtoConstants.ChatroomState.Chatroom_State_End).build(); chatroomInfoMap.put(chatroomId, room); callbackChatroomInfoUpdateEvent(chatroomId, Chatroom_Event_Destroy);