Skip to content

Commit 2fdf110

Browse files
committed
解决双方同时加好友后,有一方接受后,另外一方无法接受问题
1 parent 4a2d7a4 commit 2fdf110

2 files changed

Lines changed: 13 additions & 6 deletions

File tree

broker/src/main/java/io/moquette/imhandler/HandleFriendRequestHandler.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import win.liyufan.im.IMTopic;
2020
import win.liyufan.im.MessageShardingUtil;
2121

22+
import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_ALREADY_FRIENDS;
2223
import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS;
2324

2425
@Handler(IMTopic.HandleFriendRequestTopic)
@@ -86,6 +87,10 @@ public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, bo
8687
publisher.publishNotification(IMTopic.NotifyFriendTopic, fromUser, heads[1]);
8788
}
8889
}
90+
if(errorCode == ERROR_CODE_ALREADY_FRIENDS) {
91+
errorCode = ERROR_CODE_SUCCESS;
92+
}
93+
8994
return errorCode;
9095
}
9196
}

broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2856,7 +2856,7 @@ public ErrorCode SyncFriendRequestUnread(String userId, long unreadDt, long[] he
28562856
public ErrorCode handleFriendRequest(String userId, WFCMessage.HandleFriendRequest request, WFCMessage.Message.Builder msgBuilder, long[] heads, boolean isAdmin) {
28572857
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
28582858

2859-
2859+
boolean alreadyFriend = false;
28602860
if(!isAdmin && request.getStatus() == ProtoConstants.FriendRequestStatus.RequestStatus_Accepted) {
28612861
MultiMap<String, FriendData> friendsMap = hzInstance.getMultiMap(USER_FRIENDS);
28622862

@@ -2868,10 +2868,9 @@ public ErrorCode handleFriendRequest(String userId, WFCMessage.HandleFriendReque
28682868
for (FriendData fd : friends) {
28692869
if (fd.getFriendUid().equals(request.getTargetUid())) {
28702870
if (fd.getState() == 0) {
2871-
return ErrorCode.ERROR_CODE_ALREADY_FRIENDS;
2872-
} else {
2873-
break;
2871+
alreadyFriend = true;
28742872
}
2873+
break;
28752874
}
28762875
}
28772876
}
@@ -2950,7 +2949,7 @@ public ErrorCode handleFriendRequest(String userId, WFCMessage.HandleFriendReque
29502949
}
29512950

29522951
if (existRequest != null) {
2953-
if (mFriendRequestExpiration > 0 && System.currentTimeMillis() - existRequest.getUpdateDt() > mFriendRequestExpiration) {
2952+
if (!alreadyFriend && mFriendRequestExpiration > 0 && System.currentTimeMillis() - existRequest.getUpdateDt() > mFriendRequestExpiration) {
29542953
return ErrorCode.ERROR_CODE_FRIEND_REQUEST_EXPIRED;
29552954
} else {
29562955
existRequest = existRequest.toBuilder().setStatus(request.getStatus()).setUpdateDt(System.currentTimeMillis()).build();
@@ -2976,7 +2975,7 @@ public ErrorCode handleFriendRequest(String userId, WFCMessage.HandleFriendReque
29762975
}
29772976
}
29782977

2979-
if(request.getStatus() == ProtoConstants.FriendRequestStatus.RequestStatus_Accepted){
2978+
if(!alreadyFriend && request.getStatus() == ProtoConstants.FriendRequestStatus.RequestStatus_Accepted){
29802979
MultiMap<String, FriendData> friendsMap = hzInstance.getMultiMap(USER_FRIENDS);
29812980
FriendData friendData1 = new FriendData(userId, request.getTargetUid(), "", request.getExtra(), 0, 0, System.currentTimeMillis());
29822981
databaseStore.persistOrUpdateFriendData(friendData1);
@@ -2997,6 +2996,9 @@ public ErrorCode handleFriendRequest(String userId, WFCMessage.HandleFriendReque
29972996

29982997
callbackRelationEvent(userId, request.getTargetUid(), 0, "1");
29992998
}
2999+
if(alreadyFriend) {
3000+
return ErrorCode.ERROR_CODE_ALREADY_FRIENDS;
3001+
}
30003002
return ErrorCode.ERROR_CODE_SUCCESS;
30013003
}
30023004
} else {

0 commit comments

Comments
 (0)