diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 0d0d9c81..e48d07b6 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -78,8 +78,7 @@ import static io.moquette.BrokerConstants.*; import static io.moquette.server.Constants.MAX_CHATROOM_MESSAGE_QUEUE; import static io.moquette.server.Constants.MAX_MESSAGE_QUEUE; import static cn.wildfirechat.pojos.MyInfoType.*; -import static win.liyufan.im.UserSettingScope.kUserSettingAddFriendStrategy; -import static win.liyufan.im.UserSettingScope.kUserSettingPCOnline; +import static win.liyufan.im.UserSettingScope.*; public class MemoryMessagesStore implements IMessagesStore { private static final String MESSAGES_MAP = "messages_map"; @@ -3025,6 +3024,13 @@ public class MemoryMessagesStore implements IMessagesStore { return; } + if(!online && (session.isPcClient()) || session.isPadClient()) { + WFCMessage.UserSettingEntry lockSetting = getUserSetting(session.getUsername(), UserSettingScopeLockPC, session.getClientID()); + if(lockSetting != null && "1".equals(lockSetting.getValue())) { + updateUserSettings(session.getUsername(), WFCMessage.ModifyUserSettingReq.newBuilder().setScope(UserSettingScopeLockPC).setKey(session.getClientID()).setValue("0").build(), null); + } + } + String pcValue = null; String padValue = null; for (MemorySessionStore.Session s : m_Server.getStore().sessionsStore().sessionForUser(session.username)) { diff --git a/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java b/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java index 39dad7b8..69572724 100755 --- a/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java @@ -93,6 +93,15 @@ public class MemorySessionStore implements ISessionsStore { return unReceivedMsgs; } + public boolean isPcClient() { + return platform == ProtoConstants.Platform.Platform_Windows || platform == ProtoConstants.Platform.Platform_OSX || platform == ProtoConstants.Platform.Platform_LINUX; + } + + public boolean isPadClient() { + return platform == ProtoConstants.Platform.Platform_iPad || platform == ProtoConstants.Platform.Platform_APad || platform == ProtoConstants.Platform.Platform_HarmonyPad; + } + + public int getPushType() { return pushType; } diff --git a/broker/src/main/java/win/liyufan/im/UserSettingScope.java b/broker/src/main/java/win/liyufan/im/UserSettingScope.java index 66668ff0..3f1b8d7b 100644 --- a/broker/src/main/java/win/liyufan/im/UserSettingScope.java +++ b/broker/src/main/java/win/liyufan/im/UserSettingScope.java @@ -22,4 +22,5 @@ public interface UserSettingScope { int kUserSettingPrivacySearchable = 27; int kUserSettingAddFriendStrategy = 28; int kUserSettingScopeSyncBadge = 29; + int UserSettingScopeLockPC = 30; }