diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 7009da80..32a0ec66 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -2147,6 +2147,21 @@ public class MemoryMessagesStore implements IMessagesStore { public ErrorCode handleFriendRequest(String userId, WFCMessage.HandleFriendRequest request, WFCMessage.Message.Builder msgBuilder, long[] heads, boolean isAdmin) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); + if(request.getStatus() == ProtoConstants.FriendRequestStatus.RequestStatus_Accepted) { + Collection friendDatas = getFriendDatas(hzInstance, userId); + for (FriendData fd : friendDatas) { + if (fd.getFriendUid().equals(request.getTargetUid())) { + if (fd.getState() == 0) { + return ErrorCode.ERROR_CODE_ALREADY_FRIENDS; + } else { + break; + } + } + } + } + + IMap friendEmpty = hzInstance.getMap(USER_FRIENDS_EMPTY); + if (isAdmin) { MultiMap friendsMap = hzInstance.getMultiMap(USER_FRIENDS); diff --git a/common/src/main/java/cn/wildfirechat/common/ErrorCode.java b/common/src/main/java/cn/wildfirechat/common/ErrorCode.java index 419d1e90..9a6c99db 100755 --- a/common/src/main/java/cn/wildfirechat/common/ErrorCode.java +++ b/common/src/main/java/cn/wildfirechat/common/ErrorCode.java @@ -42,6 +42,8 @@ public enum ErrorCode { ERROR_CODE_NOT_IN_CHANNEL(21, "not in channel"), + ERROR_CODE_ALREADY_FRIENDS(23, "already friends"), + ERROR_CODE_GROUP_MUTED(241, "group is muted"), ERROR_CODE_SENSITIVE_MATCHED(242, "sensitive matched"), ERROR_CODE_SIGN_EXPIRED(243, "sign expired"),