diff --git a/.gitignore b/.gitignore index b154040c..f745743c 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,5 @@ maven-metadata.xml /bin/ broker/config/git.properties distribution/src/main/resources/git.properties +broker/h2db +broker/media diff --git a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java index 617fd073..3def95e4 100644 --- a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java +++ b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java @@ -732,12 +732,31 @@ public class DatabaseStore { ", `_extra`" + ", `_dt`" + ", `_member_count`" + - ", `_member_dt`) values(?, ?, ?, ?, ?, ?, ?, ?, ?)"; + ", `_member_dt`) values(?, ?, ?, ?, ?, ?, ?, ?, ?)" + + " ON DUPLICATE KEY UPDATE " + + "`_name` = ?," + + "`_portrait` = ?," + + "`_owner` = ?," + + "`_type` = ?," + + "`_extra` = ?," + + "`_dt` = ?," + + "`_member_count` = ?," + + "`_member_dt` = ?"; + statement = connection.prepareStatement(sql); int index = 1; statement.setString(index++, groupInfo.getTargetId()); + statement.setString(index++, groupInfo.getName()); + statement.setString(index++, groupInfo.getPortrait()); + statement.setString(index++, groupInfo.getOwner()); + statement.setInt(index++, groupInfo.getType()); + statement.setString(index++, groupInfo.getExtra()); + statement.setLong(index++, groupInfo.getUpdateDt() == 0 ? System.currentTimeMillis() : groupInfo.getUpdateDt()); + statement.setInt(index++, groupInfo.getMemberCount()); + statement.setLong(index++, groupInfo.getMemberUpdateDt() == 0 ? System.currentTimeMillis() : groupInfo.getUpdateDt()); + statement.setString(index++, groupInfo.getName()); statement.setString(index++, groupInfo.getPortrait()); statement.setString(index++, groupInfo.getOwner()); diff --git a/broker/src/main/java/io/moquette/persistence/GroupLoader.java b/broker/src/main/java/io/moquette/persistence/GroupLoader.java index 71484b04..185509a4 100644 --- a/broker/src/main/java/io/moquette/persistence/GroupLoader.java +++ b/broker/src/main/java/io/moquette/persistence/GroupLoader.java @@ -10,12 +10,13 @@ package io.moquette.persistence; import cn.wildfirechat.proto.WFCMessage; import com.hazelcast.core.MapLoader; +import com.hazelcast.core.MapStore; import io.moquette.server.Server; import java.util.Collection; import java.util.Map; -public class GroupLoader implements MapLoader { +public class GroupLoader implements MapStore { private DatabaseStore getDatabaseStore() { return Server.getServer().getStore().messagesStore().getDatabaseStore(); } @@ -51,18 +52,31 @@ public class GroupLoader implements MapLoader { return null; } - /** - * Loads all of the keys from the store. The returned {@link Iterable} may return the keys lazily - * by loading them in batches. The {@link Iterator} of this {@link Iterable} may implement the - * {@link Closeable} interface in which case it will be closed once iteration is over. - * This is intended for releasing resources such as closing a JDBC result set. - *

- * The returned Iterable should not contain any null keys. - * - * @return all the keys. Keys inside the Iterable cannot be null. - */ + @Override public Iterable loadAllKeys() { return null; } + + @Override + public void store(String key, WFCMessage.GroupInfo value) { + getDatabaseStore().persistGroupInfo(value); + } + + @Override + public void storeAll(Map map) { + for (WFCMessage.GroupInfo value : map.values()) { + getDatabaseStore().persistGroupInfo(value); + } + } + + @Override + public void delete(String key) { + getDatabaseStore().removeGroupInfoFromDB(key); + } + + @Override + public void deleteAll(Collection keys) { + + } } diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 2092e114..8cf044c1 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -591,7 +591,6 @@ public class MemoryMessagesStore implements IMessagesStore { .build(); mIMap.put(groupId, groupInfo); - databaseStore.persistGroupInfo(groupInfo); MultiMap groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS); for (WFCMessage.GroupMember member : memberList) { @@ -767,8 +766,7 @@ public class MemoryMessagesStore implements IMessagesStore { groupMembers.remove(groupId); mIMap.remove(groupId); - - databaseStore.removeGroupInfoFromDB(groupId); + databaseStore.removeGroupMemberFromDB(groupId); return ErrorCode.ERROR_CODE_SUCCESS; diff --git a/broker/src/main/resources/c3p0-config.xml b/broker/src/main/resources/c3p0-config.xml index 047cd32d..1a3dcc2b 100755 --- a/broker/src/main/resources/c3p0-config.xml +++ b/broker/src/main/resources/c3p0-config.xml @@ -19,7 +19,7 @@ root - lt123456 + 123456 10