From 40e9d108ad1a5d52115d6538ed353da4cca3922f Mon Sep 17 00:00:00 2001 From: imhao183 Date: Fri, 14 May 2021 09:28:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=93=E5=AE=A2=E6=88=B7=E7=AB=AF=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E7=94=A8=E6=88=B7=E8=AE=BE=E7=BD=AE=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E9=9C=80=E8=A6=81=E5=86=8D=E9=80=9A=E7=9F=A5=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E7=9A=84=E7=AB=AF=E9=87=8D=E6=96=B0=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../moquette/imhandler/PutUserSettingHandler.java | 2 +- .../moquette/persistence/MemoryMessagesStore.java | 10 +++++----- .../main/java/io/moquette/spi/IMessagesStore.java | 2 +- .../io/moquette/spi/impl/MessagesPublisher.java | 13 ++++++++++--- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/broker/src/main/java/io/moquette/imhandler/PutUserSettingHandler.java b/broker/src/main/java/io/moquette/imhandler/PutUserSettingHandler.java index 02bf1a3c..9b040390 100644 --- a/broker/src/main/java/io/moquette/imhandler/PutUserSettingHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/PutUserSettingHandler.java @@ -18,7 +18,7 @@ import win.liyufan.im.IMTopic; public class PutUserSettingHandler extends IMHandler { @Override public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.ModifyUserSettingReq request, Qos1PublishHandler.IMCallback callback) { - m_messagesStore.updateUserSettings(fromUser, request); + m_messagesStore.updateUserSettings(fromUser, request, clientID); return ErrorCode.ERROR_CODE_SUCCESS; } } diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 9566fd15..1635aec1 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -2112,7 +2112,7 @@ public class MemoryMessagesStore implements IMessagesStore { } if (session.getPlatform() == Platform_LINUX || session.getPlatform() == Platform_Windows || session.getPlatform() == Platform_OSX) { - updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue(online ? (System.currentTimeMillis() + "|" + session.getPlatform() + "|" + session.getClientID() + "|" + session.getPhoneName()) : "").build()); + updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue(online ? (System.currentTimeMillis() + "|" + session.getPlatform() + "|" + session.getClientID() + "|" + session.getPhoneName()) : "").build(), session.clientID); } else { String value = null; for (MemorySessionStore.Session s : m_Server.getStore().sessionsStore().sessionForUser(session.username)) { @@ -2138,11 +2138,11 @@ public class MemoryMessagesStore implements IMessagesStore { WFCMessage.UserSettingEntry pcentry = getUserSetting(session.getUsername(), kUserSettingPCOnline, "PC"); if (value != null) { if (pcentry == null || StringUtil.isNullOrEmpty(pcentry.getValue())) { - updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue(value).build()); + updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue(value).build(), session.clientID); } } else { if (pcentry != null && !StringUtil.isNullOrEmpty(pcentry.getValue())) { - updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue("").build()); + updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue("").build(), session.clientID); } } } @@ -3143,7 +3143,7 @@ public class MemoryMessagesStore implements IMessagesStore { } @Override - public long updateUserSettings(String userId, WFCMessage.ModifyUserSettingReq request) { + public long updateUserSettings(String userId, WFCMessage.ModifyUserSettingReq request, String clientId) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); MultiMap userSettingMap = hzInstance.getMultiMap(USER_SETTING); @@ -3183,7 +3183,7 @@ public class MemoryMessagesStore implements IMessagesStore { } else if(request.getScope() == UserSettingScope.kUserSettingHiddenNotificationDetail) { userPushHiddenDetail.remove(userId); } - IMHandler.getPublisher().publishNotification(IMTopic.NotifyUserSettingTopic, userId, updateDt); + IMHandler.getPublisher().publishNotification(IMTopic.NotifyUserSettingTopic, userId, updateDt, clientId); return updateDt; } diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index 99e7b26a..6653fe75 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -190,7 +190,7 @@ public interface IMessagesStore { ErrorCode getUserSettings(String userId, long version, WFCMessage.GetUserSettingResult.Builder builder); WFCMessage.UserSettingEntry getUserSetting(String userId, int scope, String key); List getUserSetting(String userId, int scope); - long updateUserSettings(String userId, WFCMessage.ModifyUserSettingReq request); + long updateUserSettings(String userId, WFCMessage.ModifyUserSettingReq request, String clientId); void clearUserSettings(String userId); boolean getUserGlobalSilent(String userId); 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 3d595974..9ef6d74f 100755 --- a/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java +++ b/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java @@ -465,14 +465,21 @@ public class MessagesPublisher { publishNotification(topic, receiver, head, null, null); } - public void publishNotification(String topic, String receiver, long head, String fromUser, String pushContent) { - publishNotificationLocal(topic, receiver, head, fromUser, pushContent); + public void publishNotification(String topic, String receiver, long head, String exceptClientId) { + publishNotification(topic, receiver, head, null, null, exceptClientId); } - void publishNotificationLocal(String topic, String receiver, long head, String fromUser, String pushContent) { + public void publishNotification(String topic, String receiver, long head, String fromUser, String pushContent) { + publishNotification(topic, receiver, head, fromUser, pushContent, null); + } + public void publishNotification(String topic, String receiver, long head, String fromUser, String pushContent, String exceptClientId) { Collection sessions = m_sessionsStore.sessionForUser(receiver); String fromUserName = null; for (Session targetSession : sessions) { + if(targetSession.getClientID().equals(exceptClientId)) { + continue; + } + boolean needPush = !StringUtil.isNullOrEmpty(pushContent); boolean targetIsActive = this.connectionDescriptors.isConnected(targetSession.getClientSession().clientID); if (targetIsActive) {