From 758c5de2c7fd0ea2d78bf8d4b94310e35e4e38bf Mon Sep 17 00:00:00 2001 From: heavyrian2012 Date: Mon, 24 Apr 2023 11:26:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3pc=E5=A4=9A=E7=AB=AF=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E4=BA=92=E8=B8=A2=E6=97=B6pc=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=B2=A1=E6=9C=89=E6=9B=B4=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/MemoryMessagesStore.java | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index a5792c25..914ddedb 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -2510,6 +2510,28 @@ public class MemoryMessagesStore implements IMessagesStore { } } + private boolean isOnlineValueEqual(WFCMessage.UserSettingEntry pcentry, String newValue) { + if(pcentry == null) { + return StringUtil.isNullOrEmpty(newValue); + } + + String oldValue = pcentry.getValue(); + if(StringUtil.isNullOrEmpty(oldValue) && StringUtil.isNullOrEmpty(newValue)) { + return true; + } + + if(StringUtil.isNullOrEmpty(oldValue) || StringUtil.isNullOrEmpty(newValue)) { + return false; + } + + String[] ssOld = oldValue.split("\\|"); + String[] ssNew = newValue.split("\\|"); + if(ssOld.length != 4 || ssNew.length != 4 || !ssOld[1].equals(ssNew[1]) || !ssOld[2].equals(ssNew[2]) || !ssOld[3].equals(ssNew[3])) { + return false; + } + return true; + } + @Override public void updateUserOnlineSetting(MemorySessionStore.Session session, boolean online) { if(!mMultiPlatformNotification) { @@ -2541,14 +2563,8 @@ public class MemoryMessagesStore implements IMessagesStore { } WFCMessage.UserSettingEntry pcentry = getUserSetting(session.getUsername(), kUserSettingPCOnline, "PC"); - if (pcValue != null) { - if (pcentry == null || StringUtil.isNullOrEmpty(pcentry.getValue())) { - updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue(pcValue).build(), session.clientID); - } - } else { - if (pcentry != null && !StringUtil.isNullOrEmpty(pcentry.getValue())) { - updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue("").build(), session.clientID); - } + if (!isOnlineValueEqual(pcentry, pcValue)) { + updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue(pcValue==null?"":pcValue).build(), session.clientID); } }