diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 9e32c3a2..dcd4fca6 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -2326,53 +2326,47 @@ public class MemoryMessagesStore implements IMessagesStore { return; } - 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(), session.clientID); - } else if (session.getPlatform() == Platform_iPad || session.getPlatform() == Platform_APad) { - updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("Pad").setValue(online ? (System.currentTimeMillis() + "|" + session.getPlatform() + "|" + session.getClientID() + "|" + session.getPhoneName()) : "").build(), session.clientID); + String pcValue = null; + String padValue = null; + for (MemorySessionStore.Session s : m_Server.getStore().sessionsStore().sessionForUser(session.username)) { + if (s.getDeleted() != 0 || !m_Server.getConnectionsManager().isConnected(s.getClientID())) { + continue; + } + + switch (s.getPlatform()) { + case Platform_LINUX: + case Platform_Windows: + case Platform_OSX: + pcValue = System.currentTimeMillis() + "|" + s.getPlatform() + "|" + s.getClientID() + "|" + s.getPhoneName(); + break; + case Platform_iPad: + case Platform_APad: + padValue = System.currentTimeMillis() + "|" + s.getPlatform() + "|" + s.getClientID() + "|" + s.getPhoneName(); + break; + default: + break; + } + } + + 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 { - String pcValue = null; - String padValue = null; - for (MemorySessionStore.Session s : m_Server.getStore().sessionsStore().sessionForUser(session.username)) { - if (s.getDeleted() != 0 || !m_Server.getConnectionsManager().isConnected(s.getClientID())) { - continue; - } - - switch (s.getPlatform()) { - case Platform_LINUX: - case Platform_Windows: - case Platform_OSX: - pcValue = System.currentTimeMillis() + "|" + s.getPlatform() + "|" + s.getClientID() + "|" + s.getPhoneName(); - break; - case Platform_iPad: - case Platform_APad: - padValue = System.currentTimeMillis() + "|" + s.getPlatform() + "|" + s.getClientID() + "|" + s.getPhoneName(); - break; - default: - break; - } + if (pcentry != null && !StringUtil.isNullOrEmpty(pcentry.getValue())) { + updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue("").build(), session.clientID); } + } - 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); - } + WFCMessage.UserSettingEntry padentry = getUserSetting(session.getUsername(), kUserSettingPCOnline, "Pad"); + if (padValue != null) { + if (padentry == null || StringUtil.isNullOrEmpty(padentry.getValue())) { + updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("Pad").setValue(padValue).build(), session.clientID); } - - WFCMessage.UserSettingEntry padentry = getUserSetting(session.getUsername(), kUserSettingPCOnline, "Pad"); - if (padValue != null) { - if (padentry == null || StringUtil.isNullOrEmpty(padentry.getValue())) { - updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("Pad").setValue(padValue).build(), session.clientID); - } - } else { - if (padentry != null && !StringUtil.isNullOrEmpty(padentry.getValue())) { - updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("Pad").setValue("").build(), session.clientID); - } + } else { + if (padentry != null && !StringUtil.isNullOrEmpty(padentry.getValue())) { + updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("Pad").setValue("").build(), session.clientID); } } } diff --git a/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java b/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java index 0c6b56f8..f8d61d08 100755 --- a/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java +++ b/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java @@ -622,14 +622,15 @@ public class ProtocolProcessor { if(session != null) { session.refreshLastActiveTime(); forwardOnlineStatusEvent(username, clientID, session.getPlatform(), clearSession ? UserOnlineStatus.LOGOUT : UserOnlineStatus.OFFLINE, session.getAppName()); - m_messagesStore.updateUserOnlineSetting(session, false); } ConnectionDescriptor oldConnDescr = new ConnectionDescriptor(clientID, channel); if(connectionDescriptors.removeConnection(oldConnDescr)) { m_interceptor.notifyClientConnectionLost(clientID, username); } - + if(session != null) { + m_messagesStore.updateUserOnlineSetting(session, false); + } } /**