From bf70a1e80e7afe16ae2ea707ea34e10ccd30734a Mon Sep 17 00:00:00 2001 From: "heavyrain.lee" Date: Mon, 5 Aug 2019 19:04:18 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=80=E5=87=BA=E7=BE=A4=E7=BB=84=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E5=88=A0=E6=8E=89=E7=BE=A4=E7=9B=B8=E5=85=B3=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../moquette/persistence/DatabaseStore.java | 34 +++++++++++++++++++ .../persistence/MemoryMessagesStore.java | 15 +++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java index 1358e816..16f0cf8d 100644 --- a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java +++ b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java @@ -911,6 +911,40 @@ public class DatabaseStore { } + void removeGroupUserSettings(String groupId, List users) { + Connection connection = null; + PreparedStatement statement = null; + try { + connection = DBUtil.getConnection(); + + StringBuilder sb = new StringBuilder("delete t_user_setting where _scope in (1,3,5,7) and _uid in ("); + for (int i = 0; i < users.size(); i++) { + sb.append("?"); + if (i != users.size() - 1) { + sb.append(","); + } + } + sb.append(") and _key like '1-_-?'"); + + + statement = connection.prepareStatement(sb.toString()); + int index = 1; + for (String userId:users) { + statement.setString(index++, userId); + } + statement.setString(index++, groupId); + + int count = statement.executeUpdate(); + LOG.info("Update rows {}", count); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + Utility.printExecption(LOG, e); + } finally { + DBUtil.closeDB(connection, statement); + } + } + void persistGroupInfo(final WFCMessage.GroupInfo groupInfo) { mScheduler.execute(()->{ Connection connection = null; diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index fc1fa65b..5156f768 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -758,7 +758,7 @@ public class MemoryMessagesStore implements IMessagesStore { } removeFavGroup(groupId, removedIds); - + removeGroupUserSettings(groupId, removedIds); return ErrorCode.ERROR_CODE_SUCCESS; } @@ -827,9 +827,21 @@ public class MemoryMessagesStore implements IMessagesStore { } removeFavGroup(groupId, Arrays.asList(operator)); + removeGroupUserSettings(groupId, Arrays.asList(operator)); return ErrorCode.ERROR_CODE_SUCCESS; } + private void removeGroupUserSettings(String groupId, List users) { + HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); + MultiMap userSettingMap = hzInstance.getMultiMap(USER_SETTING); + + databaseStore.removeGroupUserSettings(groupId, users); + for (String userId:users) { + userSettingMap.remove(userId); + } + + } + @Override public ErrorCode dismissGroup(String operator, String groupId, boolean isAdmin) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); @@ -869,6 +881,7 @@ public class MemoryMessagesStore implements IMessagesStore { } } removeFavGroup(groupId, ids); + removeGroupUserSettings(groupId, ids); return ErrorCode.ERROR_CODE_SUCCESS; }