From bb5b6fac17fbdf2d2a13a16befc278499668a2c3 Mon Sep 17 00:00:00 2001 From: imhao183 Date: Wed, 12 Aug 2020 14:58:28 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=BE=A4=E6=88=90=E5=91=98?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=97=B6=E6=A3=80=E6=9F=A5=E7=BE=A4=E6=88=90?= =?UTF-8?q?=E5=91=98=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../action/admin/GetGroupMembersAction.java | 2 +- .../imhandler/GetGroupMemberHandler.java | 2 +- .../persistence/MemoryMessagesStore.java | 22 ++++++++++++++++++- .../java/io/moquette/spi/IMessagesStore.java | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetGroupMembersAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetGroupMembersAction.java index 600a75ca..12b2ae8f 100755 --- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetGroupMembersAction.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetGroupMembersAction.java @@ -46,7 +46,7 @@ public class GetGroupMembersAction extends AdminAction { && (!StringUtil.isNullOrEmpty(inputGetGroup.getGroupId()))) { List members = new ArrayList<>(); - ErrorCode errorCode = messagesStore.getGroupMembers(inputGetGroup.getGroupId(), 0, members); + ErrorCode errorCode = messagesStore.getGroupMembers(null, inputGetGroup.getGroupId(), 0, members); response.setStatus(HttpResponseStatus.OK); diff --git a/broker/src/main/java/io/moquette/imhandler/GetGroupMemberHandler.java b/broker/src/main/java/io/moquette/imhandler/GetGroupMemberHandler.java index f76237df..cb18b016 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetGroupMemberHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetGroupMemberHandler.java @@ -24,7 +24,7 @@ public class GetGroupMemberHandler extends IMHandler members = new ArrayList<>(); - ErrorCode errorCode = m_messagesStore.getGroupMembers(request.getTarget(), request.getHead(), members); + ErrorCode errorCode = m_messagesStore.getGroupMembers(fromUser, request.getTarget(), request.getHead(), members); if (errorCode == ERROR_CODE_SUCCESS) { WFCMessage.PullGroupMemberResult result = WFCMessage.PullGroupMemberResult.newBuilder().addAllMember(members).build(); diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 0f405044..82eb3c5c 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -1237,7 +1237,7 @@ public class MemoryMessagesStore implements IMessagesStore { } @Override - public ErrorCode getGroupMembers(String groupId, long maxDt, List members) { + public ErrorCode getGroupMembers(String fromUser, String groupId, long maxDt, List members) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); IMap mIMap = hzInstance.getMap(GROUPS_MAP); @@ -1253,10 +1253,30 @@ public class MemoryMessagesStore implements IMessagesStore { if (memberCollection == null || memberCollection.size() == 0) { memberCollection = loadGroupMemberFromDB(hzInstance, groupId); } + boolean notInGroup = true; + WFCMessage.GroupMember self = null; for (WFCMessage.GroupMember member:memberCollection) { if (member.getUpdateDt() > maxDt) { members.add(member); } + if (fromUser != null && notInGroup) { + if (member.getMemberId().equals(fromUser)) { + if (member.getType() != GroupMemberType_Removed) { + notInGroup = false; + } else { + self = member; + break; + } + } + } + } + + //server api fromUser is null + if (fromUser != null && notInGroup) { + members.clear(); + if (self != null) { + members.add(self.toBuilder().setUpdateDt(0).setType(GroupMemberType_Normal).build()); + } } return ErrorCode.ERROR_CODE_SUCCESS; diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index 6851ca2f..51ad9dc5 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -115,7 +115,7 @@ public interface IMessagesStore { List getGroupInfos(List requests); WFCMessage.GroupInfo getGroupInfo(String groupId); Set getUserGroupIds(String userId); - ErrorCode getGroupMembers(String groupId, long maxDt, List members); + ErrorCode getGroupMembers(String fromUser, String groupId, long maxDt, List members); WFCMessage.GroupMember getGroupMember(String groupId, String memberId); ErrorCode transferGroup(String operator, String groupId, String newOwner, boolean isAdmin); ErrorCode setGroupManager(String operator, String groupId, int type, List userList, boolean isAdmin);