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);