From a1b4eca6f2ecb8e0353966fd44f40030ec32d9ac Mon Sep 17 00:00:00 2001 From: "heavyrain.lee" Date: Fri, 21 Feb 2020 11:19:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A8=E9=80=81=E6=97=B6?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/wildfirechat/push/PushServer.java | 2 +- .../persistence/MemoryMessagesStore.java | 19 +++++++++++ .../java/io/moquette/spi/IMessagesStore.java | 1 + .../moquette/spi/impl/MessagesPublisher.java | 33 +++++++++++++++---- 4 files changed, 48 insertions(+), 7 deletions(-) diff --git a/broker/src/main/java/cn/wildfirechat/push/PushServer.java b/broker/src/main/java/cn/wildfirechat/push/PushServer.java index 4c492a72..643d1126 100644 --- a/broker/src/main/java/cn/wildfirechat/push/PushServer.java +++ b/broker/src/main/java/cn/wildfirechat/push/PushServer.java @@ -57,7 +57,7 @@ public class PushServer { } public void pushMessage(PushMessage pushMessage, String deviceId, String pushContent) { - LOG.info("try to delivery push diviceId = {}, pushContent = {}", deviceId, pushContent); + LOG.info("try to delivery push diviceId = {}, conversationType = {}, pushContent = {}", deviceId, pushMessage.convType, pushContent); executorService.execute(() ->{ try { pushMessageInternel(pushMessage, deviceId, pushContent); diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index e2ba1965..233e53fe 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -2165,6 +2165,25 @@ public class MemoryMessagesStore implements IMessagesStore { return ErrorCode.ERROR_CODE_SUCCESS; } + @Override + public FriendData getFriendData(String fromUser, String targetUserId) { + HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); + MultiMap friendsMap = hzInstance.getMultiMap(USER_FRIENDS); + + Collection friends = friendsMap.get(fromUser); + if (friends == null || friends.size() == 0) { + friends = loadFriend(friendsMap, fromUser); + } + + for (FriendData fd:friends) { + if (fd.getFriendUid().equals(targetUserId)) { + return fd; + } + } + + return null; + } + @Override public ErrorCode setFriendAliasRequest(String fromUser, String targetUserId, String alias, long[] heads){ HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index 9c80dcda..eb02f622 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -167,6 +167,7 @@ public interface IMessagesStore { ErrorCode handleFriendRequest(String userId, WFCMessage.HandleFriendRequest request, WFCMessage.Message.Builder msgBuilder, long[] heads, boolean isAdmin); ErrorCode deleteFriend(String userId, String friendUid, long[] head); ErrorCode blackUserRequest(String fromUser, String targetUserId, int status, long[] head); + FriendData getFriendData(String fromUser, String targetUserId); ErrorCode SyncFriendRequestUnread(String userId, long unreadDt, long[] head); ErrorCode isAllowUserMessage(String fromUser, String userId); ErrorCode setFriendAliasRequest(String fromUser, String targetUserId, String alias, long[] head); diff --git a/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java b/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java index b06bfaf3..0f787030 100755 --- a/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java +++ b/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java @@ -23,6 +23,7 @@ import com.hazelcast.core.HazelcastInstance; import com.hazelcast.util.StringUtil; import cn.wildfirechat.pojos.OutputNotifyChannelSubscribeStatus; import cn.wildfirechat.pojos.SendMessageData; +import com.xiaoleilu.loServer.model.FriendData; import io.moquette.persistence.*; import io.moquette.persistence.MemorySessionStore.Session; import io.moquette.server.ConnectionDescriptorStore; @@ -316,11 +317,19 @@ public class MessagesPublisher { boolean isHiddenDetail = m_messagesStore.getUserPushHiddenDetail(user); if(!nameLoaded) { - senderName = getUserDisplayName(sender); + senderName = getUserDisplayName(sender, conversationType == ProtoConstants.ConversationType.ConversationType_Group ? target : null); targetName = getTargetName(target, conversationType); nameLoaded = true; } - this.messageSender.sendPush(sender, conversationType, target, line, messageHead, targetSession.getClientID(), pushContent, messageContentType, serverTime, senderName, targetName, targetSession.getUnReceivedMsgs(), curMentionType, isHiddenDetail, targetSession.getLanguage()); + + String name = senderName; + if (!sender.equals(user)) { + FriendData fd = m_messagesStore.getFriendData(user, sender); + if (fd != null && !StringUtil.isNullOrEmpty(fd.getAlias())) { + name = fd.getAlias(); + } + } + this.messageSender.sendPush(sender, conversationType, target, line, messageHead, targetSession.getClientID(), pushContent, messageContentType, serverTime, name, targetName, targetSession.getUnReceivedMsgs(), curMentionType, isHiddenDetail, targetSession.getLanguage()); } } @@ -356,22 +365,34 @@ public class MessagesPublisher { } } - String getUserDisplayName(String userId) { + String getUserDisplayName(String userId, String groupId) { WFCMessage.User user = m_messagesStore.getUserInfo(userId); + String userName = null; if(user != null) { - return user.getDisplayName(); + userName = user.getDisplayName(); } - return null; + if (!StringUtil.isNullOrEmpty(groupId)) { + WFCMessage.GroupMember member = m_messagesStore.getGroupMember(groupId, userId); + if (member != null && !StringUtil.isNullOrEmpty(member.getAlias())) { + userName = member.getAlias(); + } + } + return userName; } String getTargetName(String targetId, int cnvType) { if (cnvType == ProtoConstants.ConversationType.ConversationType_Private) { - return getUserDisplayName(targetId); + return getUserDisplayName(targetId, null); } else if(cnvType == ProtoConstants.ConversationType.ConversationType_Group) { WFCMessage.GroupInfo group = m_messagesStore.getGroupInfo(targetId); if(group != null) { return group.getName(); } + } else if(cnvType == ProtoConstants.ConversationType.ConversationType_Channel) { + WFCMessage.ChannelInfo channelInfo = m_messagesStore.getChannelInfo(targetId); + if (channelInfo != null) { + return channelInfo.getName(); + } } return null; }