From 73a971bde377ad6384492d41bb4587992a9efc6e Mon Sep 17 00:00:00 2001 From: heavyrain2012 Date: Mon, 25 Nov 2019 18:49:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=B7=B2=E8=AF=BB=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E6=97=B6=EF=BC=8C=E5=A6=82=E6=9E=9C=E6=98=AF=E6=8E=92?= =?UTF-8?q?=E9=99=A4=E6=8E=89=E5=B7=B2=E7=BB=8F=E8=A7=A3=E6=95=A3=E7=9A=84?= =?UTF-8?q?=E7=BE=A4=E7=BB=84=E5=92=8C=E9=94=80=E6=AF=81=E7=9A=84=E9=A2=91?= =?UTF-8?q?=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/MemoryMessagesStore.java | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index ae24e348..70e136b4 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -2040,6 +2040,8 @@ public class MemoryMessagesStore implements IMessagesStore { public ErrorCode getUserSettings(String userId, long version, WFCMessage.GetUserSettingResult.Builder builder) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); MultiMap userSettingMap = hzInstance.getMultiMap(USER_SETTING); + IMap mGroups = hzInstance.getMap(GROUPS_MAP); + IMap mChannels = hzInstance.getMap(CHANNELS); Collection entries = userSettingMap.get(userId); if (entries == null || entries.size() == 0) { @@ -2047,12 +2049,51 @@ public class MemoryMessagesStore implements IMessagesStore { } ErrorCode ec = ErrorCode.ERROR_CODE_NOT_MODIFIED; + Calendar c = Calendar.getInstance(); + c.setTime(new Date()); + c.add(Calendar.MONTH, -1); + long monthAgo = c.getTimeInMillis(); + if (entries != null) { for (WFCMessage.UserSettingEntry entry : entries ) { if (entry.getUpdateDt() > version) { ec = ErrorCode.ERROR_CODE_SUCCESS; - builder.addEntry(entry); + boolean skip = false; + if (version == 0 && entry.getUpdateDt() > monthAgo) { + if (entry.getScope() == UserSettingScope.kUserSettingConversationSync) { + try { + String key = entry.getKey(); + int pos1 = key.indexOf('-'); + String typeStr = key.substring(0, pos1); + int type = Integer.parseInt(typeStr); + if (type == ProtoConstants.ConversationType.ConversationType_Group + || type == ProtoConstants.ConversationType.ConversationType_Channel) { + int pos2 = key.indexOf('-', pos1 + 1); + String target = key.substring(pos2 + 1); + + if (type == ProtoConstants.ConversationType.ConversationType_Group) { + WFCMessage.GroupInfo groupInfo = mGroups.get(target); + if (groupInfo == null) { + skip = true; + } + } else { + WFCMessage.ChannelInfo channelInfo = mChannels.get(target); + if (channelInfo == null) { + skip = true; + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + } + + if (!skip) { + builder.addEntry(entry); + } } } }