解决双方同时加好友后,有一方接受后,另外一方无法接受问题

This commit is contained in:
heavyrain2012
2021-10-12 07:59:39 +08:00
parent 4a2d7a4cc5
commit 2fdf11006d
2 changed files with 13 additions and 6 deletions
@@ -19,6 +19,7 @@ import win.liyufan.im.I18n;
import win.liyufan.im.IMTopic; import win.liyufan.im.IMTopic;
import win.liyufan.im.MessageShardingUtil; import win.liyufan.im.MessageShardingUtil;
import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_ALREADY_FRIENDS;
import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS;
@Handler(IMTopic.HandleFriendRequestTopic) @Handler(IMTopic.HandleFriendRequestTopic)
@@ -86,6 +87,10 @@ public class HandleFriendRequestHandler extends IMHandler<WFCMessage.HandleFrien
publisher.publishNotification(IMTopic.NotifyFriendTopic, fromUser, heads[1]); publisher.publishNotification(IMTopic.NotifyFriendTopic, fromUser, heads[1]);
} }
} }
if(errorCode == ERROR_CODE_ALREADY_FRIENDS) {
errorCode = ERROR_CODE_SUCCESS;
}
return errorCode; return errorCode;
} }
} }
@@ -2856,7 +2856,7 @@ public class MemoryMessagesStore implements IMessagesStore {
public ErrorCode handleFriendRequest(String userId, WFCMessage.HandleFriendRequest request, WFCMessage.Message.Builder msgBuilder, long[] heads, boolean isAdmin) { public ErrorCode handleFriendRequest(String userId, WFCMessage.HandleFriendRequest request, WFCMessage.Message.Builder msgBuilder, long[] heads, boolean isAdmin) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
boolean alreadyFriend = false;
if(!isAdmin && request.getStatus() == ProtoConstants.FriendRequestStatus.RequestStatus_Accepted) { if(!isAdmin && request.getStatus() == ProtoConstants.FriendRequestStatus.RequestStatus_Accepted) {
MultiMap<String, FriendData> friendsMap = hzInstance.getMultiMap(USER_FRIENDS); MultiMap<String, FriendData> friendsMap = hzInstance.getMultiMap(USER_FRIENDS);
@@ -2868,10 +2868,9 @@ public class MemoryMessagesStore implements IMessagesStore {
for (FriendData fd : friends) { for (FriendData fd : friends) {
if (fd.getFriendUid().equals(request.getTargetUid())) { if (fd.getFriendUid().equals(request.getTargetUid())) {
if (fd.getState() == 0) { if (fd.getState() == 0) {
return ErrorCode.ERROR_CODE_ALREADY_FRIENDS; alreadyFriend = true;
} else {
break;
} }
break;
} }
} }
} }
@@ -2950,7 +2949,7 @@ public class MemoryMessagesStore implements IMessagesStore {
} }
if (existRequest != null) { if (existRequest != null) {
if (mFriendRequestExpiration > 0 && System.currentTimeMillis() - existRequest.getUpdateDt() > mFriendRequestExpiration) { if (!alreadyFriend && mFriendRequestExpiration > 0 && System.currentTimeMillis() - existRequest.getUpdateDt() > mFriendRequestExpiration) {
return ErrorCode.ERROR_CODE_FRIEND_REQUEST_EXPIRED; return ErrorCode.ERROR_CODE_FRIEND_REQUEST_EXPIRED;
} else { } else {
existRequest = existRequest.toBuilder().setStatus(request.getStatus()).setUpdateDt(System.currentTimeMillis()).build(); existRequest = existRequest.toBuilder().setStatus(request.getStatus()).setUpdateDt(System.currentTimeMillis()).build();
@@ -2976,7 +2975,7 @@ public class MemoryMessagesStore implements IMessagesStore {
} }
} }
if(request.getStatus() == ProtoConstants.FriendRequestStatus.RequestStatus_Accepted){ if(!alreadyFriend && request.getStatus() == ProtoConstants.FriendRequestStatus.RequestStatus_Accepted){
MultiMap<String, FriendData> friendsMap = hzInstance.getMultiMap(USER_FRIENDS); MultiMap<String, FriendData> friendsMap = hzInstance.getMultiMap(USER_FRIENDS);
FriendData friendData1 = new FriendData(userId, request.getTargetUid(), "", request.getExtra(), 0, 0, System.currentTimeMillis()); FriendData friendData1 = new FriendData(userId, request.getTargetUid(), "", request.getExtra(), 0, 0, System.currentTimeMillis());
databaseStore.persistOrUpdateFriendData(friendData1); databaseStore.persistOrUpdateFriendData(friendData1);
@@ -2997,6 +2996,9 @@ public class MemoryMessagesStore implements IMessagesStore {
callbackRelationEvent(userId, request.getTargetUid(), 0, "1"); callbackRelationEvent(userId, request.getTargetUid(), 0, "1");
} }
if(alreadyFriend) {
return ErrorCode.ERROR_CODE_ALREADY_FRIENDS;
}
return ErrorCode.ERROR_CODE_SUCCESS; return ErrorCode.ERROR_CODE_SUCCESS;
} }
} else { } else {