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; }