diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index b8b962ca..d31e1df5 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -806,6 +806,8 @@ public class MemoryMessagesStore implements IMessagesStore { } + int maxCount = Integer.MAX_VALUE; + if (!isAdmin) { boolean isMember = false; boolean isManager = false; @@ -835,6 +837,15 @@ public class MemoryMessagesStore implements IMessagesStore { if (!isMember && !(memberList.size() == 1 && operator.equals(memberList.get(0).getMemberId()))) { return ErrorCode.ERROR_CODE_NOT_IN_GROUP; } + + SystemSettingPojo maxMemberSetting = databaseStore.getSystemSetting(ProtoConstants.SystemSettingType.Group_Max_Member_Count); + if (maxMemberSetting != null) { + try { + maxCount = Integer.parseInt(maxMemberSetting.value); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + } } long updateDt = System.currentTimeMillis(); @@ -858,6 +869,18 @@ public class MemoryMessagesStore implements IMessagesStore { members = loadGroupMemberFromDB(hzInstance, groupId); } + if (maxCount != Integer.MAX_VALUE) { + int existCount = 0; + for (WFCMessage.GroupMember member : members) { + if (member.getType() != GroupMemberType_Removed) { + existCount++; + } + } + if (existCount + newInviteUsers.size() > maxCount) { + return ErrorCode.ERROR_CODE_GROUP_EXCEED_MAX_MEMBER_COUNT; + } + } + for (WFCMessage.GroupMember member : members) { if (newInviteUsers.contains(member.getMemberId())) { groupMembers.remove(groupId, member); diff --git a/common/src/main/java/cn/wildfirechat/common/ErrorCode.java b/common/src/main/java/cn/wildfirechat/common/ErrorCode.java index 9a6c99db..a0669601 100755 --- a/common/src/main/java/cn/wildfirechat/common/ErrorCode.java +++ b/common/src/main/java/cn/wildfirechat/common/ErrorCode.java @@ -44,6 +44,7 @@ public enum ErrorCode { ERROR_CODE_ALREADY_FRIENDS(23, "already friends"), + ERROR_CODE_GROUP_EXCEED_MAX_MEMBER_COUNT(240, "group exceed max member count"), ERROR_CODE_GROUP_MUTED(241, "group is muted"), ERROR_CODE_SENSITIVE_MATCHED(242, "sensitive matched"), ERROR_CODE_SIGN_EXPIRED(243, "sign expired"),