diff --git a/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java b/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java index e1ed85bb..3d5f9ee4 100644 --- a/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java @@ -27,7 +27,7 @@ public class CreateGroupHandler extends GroupHandler 0) { sendGroupNotification(fromUser, groupInfo.getTargetId(), request.getToLineList(), request.getNotifyContent()); diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index deda4ed3..d3ab4341 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -776,7 +776,7 @@ public class MemoryMessagesStore implements IMessagesStore { } @Override - public WFCMessage.GroupInfo createGroup(String fromUser, WFCMessage.GroupInfo groupInfo, List memberList) { + public WFCMessage.GroupInfo createGroup(String fromUser, WFCMessage.GroupInfo groupInfo, List memberList, boolean isAdmin) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); IMap mIMap = hzInstance.getMap(GROUPS_MAP); @@ -790,9 +790,14 @@ public class MemoryMessagesStore implements IMessagesStore { MultiMap groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS); + String owner = fromUser; + if (isAdmin && !StringUtil.isNullOrEmpty(groupInfo.getOwner())) { + owner = groupInfo.getOwner(); + } + List updatedMemberList = new ArrayList<>(); for (WFCMessage.GroupMember member : memberList) { - if (member.getMemberId().equals(groupInfo.getOwner())) { + if (member.getMemberId().equals(owner)) { member = member.toBuilder().setUpdateDt(dt).setCreateDt(dt).setType(ProtoConstants.GroupMemberType.GroupMemberType_Owner).build(); } else { member = member.toBuilder().setUpdateDt(dt).setCreateDt(dt).build(); @@ -811,7 +816,7 @@ public class MemoryMessagesStore implements IMessagesStore { .setUpdateDt(dt) .setMemberUpdateDt(dt) .setMemberCount(memberList.size()) - .setOwner(StringUtil.isNullOrEmpty(groupInfo.getOwner()) ? fromUser : groupInfo.getOwner()) + .setOwner(owner) .build(); mIMap.set(groupId, groupInfo); diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index 51ad9dc5..f4f25ff6 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -104,7 +104,7 @@ public interface IMessagesStore { WFCMessage.PullMessageResult fetchMessage(String user, String exceptClientId, long fromMessageId, int pullType); WFCMessage.PullMessageResult loadRemoteMessages(String user, WFCMessage.Conversation conversation, long beforeUid, int count); long insertUserMessages(String sender, int conversationType, String target, int line, int messageContentType, String userId, long messageId); - WFCMessage.GroupInfo createGroup(String operator, WFCMessage.GroupInfo groupInfo, List memberList); + WFCMessage.GroupInfo createGroup(String operator, WFCMessage.GroupInfo groupInfo, List memberList, boolean isAdmin); ErrorCode addGroupMembers(String operator, boolean isAdmin, String groupId, List memberList); ErrorCode kickoffGroupMembers(String operator, boolean isAdmin, String groupId, List memberList); ErrorCode quitGroup(String operator, String groupId);