diff --git a/broker/migrate/h2/V13__create_settings_table.sql b/broker/migrate/h2/V13__create_settings_table.sql
new file mode 100755
index 00000000..a70156e6
--- /dev/null
+++ b/broker/migrate/h2/V13__create_settings_table.sql
@@ -0,0 +1,10 @@
+
+DROP TABLE IF EXISTS `t_settings`;
+CREATE TABLE `t_settings` (
+ `id` int(11) NOT NULL PRIMARY KEY,
+ `value` varchar(64) NOT NULL,
+ `desc` varchar(128) NOT NULL
+);
+
+
+insert into t_settings(`id`, `value`,`desc`) values (1, '3000', '最大群成员数量');
diff --git a/broker/migrate/mysql/V18__create_settings_table.sql b/broker/migrate/mysql/V18__create_settings_table.sql
new file mode 100755
index 00000000..1a2dbef4
--- /dev/null
+++ b/broker/migrate/mysql/V18__create_settings_table.sql
@@ -0,0 +1,13 @@
+
+DROP TABLE IF EXISTS `t_settings`;
+CREATE TABLE `t_settings` (
+ `id` int(11) NOT NULL PRIMARY KEY,
+ `value` varchar(64) NOT NULL,
+ `desc` varchar(128) NOT NULL default ""
+)
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8mb4
+COLLATE = utf8mb4_unicode_ci;
+
+
+insert into t_settings(`id`, `value`,`desc`) values (1, "3000", "最大群成员数量");
diff --git a/broker/pom.xml b/broker/pom.xml
index ebc28fda..579ad0fd 100755
--- a/broker/pom.xml
+++ b/broker/pom.xml
@@ -147,7 +147,7 @@
com.mchange
c3p0
- [0.9.5.3,)
+ 0.9.5.4
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetSystemSettingAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetSystemSettingAction.java
new file mode 100755
index 00000000..735cc010
--- /dev/null
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetSystemSettingAction.java
@@ -0,0 +1,61 @@
+/*
+ * This file is part of the Wildfire Chat package.
+ * (c) Heavyrain2012
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+package com.xiaoleilu.loServer.action.admin;
+
+import cn.wildfirechat.common.APIPath;
+import cn.wildfirechat.common.ErrorCode;
+import cn.wildfirechat.pojos.InputGetUserInfo;
+import cn.wildfirechat.pojos.InputOutputUserInfo;
+import cn.wildfirechat.pojos.SystemSettingPojo;
+import cn.wildfirechat.proto.WFCMessage;
+import com.google.gson.Gson;
+import com.xiaoleilu.loServer.RestResult;
+import com.xiaoleilu.loServer.annotation.HttpMethod;
+import com.xiaoleilu.loServer.annotation.Route;
+import com.xiaoleilu.loServer.handler.Request;
+import com.xiaoleilu.loServer.handler.Response;
+import io.netty.handler.codec.http.FullHttpRequest;
+import io.netty.handler.codec.http.HttpResponseStatus;
+import io.netty.util.internal.StringUtil;
+
+@Route(APIPath.Get_System_Setting)
+@HttpMethod("POST")
+public class GetSystemSettingAction extends AdminAction {
+
+ @Override
+ public boolean isTransactionAction() {
+ return false;
+ }
+
+ @Override
+ public boolean action(Request request, Response response) {
+ if (request.getNettyRequest() instanceof FullHttpRequest) {
+ SystemSettingPojo inputUserId = getRequestBody(request.getNettyRequest(), SystemSettingPojo.class);
+ if (inputUserId != null) {
+ SystemSettingPojo output = messagesStore.getSystemSetting(inputUserId.id);
+
+ response.setStatus(HttpResponseStatus.OK);
+ RestResult result;
+ if (output == null) {
+ result = RestResult.resultOf(ErrorCode.ERROR_CODE_NOT_EXIST);
+ } else {
+ result = RestResult.ok(output);
+ }
+
+ response.setContent(new Gson().toJson(result));
+ } else {
+ response.setStatus(HttpResponseStatus.OK);
+ RestResult result = RestResult.resultOf(ErrorCode.INVALID_PARAMETER);
+ response.setContent(new Gson().toJson(result));
+ }
+
+ }
+ return true;
+ }
+}
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/PutSystemSettingAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/PutSystemSettingAction.java
new file mode 100755
index 00000000..7b4b66f0
--- /dev/null
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/PutSystemSettingAction.java
@@ -0,0 +1,64 @@
+/*
+ * This file is part of the Wildfire Chat package.
+ * (c) Heavyrain2012
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+package com.xiaoleilu.loServer.action.admin;
+
+import cn.wildfirechat.common.APIPath;
+import cn.wildfirechat.common.ErrorCode;
+import cn.wildfirechat.pojos.InputGetUserInfo;
+import cn.wildfirechat.pojos.InputOutputUserInfo;
+import cn.wildfirechat.pojos.SystemSettingPojo;
+import cn.wildfirechat.proto.WFCMessage;
+import com.google.gson.Gson;
+import com.xiaoleilu.loServer.RestResult;
+import com.xiaoleilu.loServer.annotation.HttpMethod;
+import com.xiaoleilu.loServer.annotation.Route;
+import com.xiaoleilu.loServer.handler.Request;
+import com.xiaoleilu.loServer.handler.Response;
+import io.netty.handler.codec.http.FullHttpRequest;
+import io.netty.handler.codec.http.HttpResponseStatus;
+import io.netty.util.internal.StringUtil;
+
+@Route(APIPath.Put_System_Setting)
+@HttpMethod("POST")
+public class PutSystemSettingAction extends AdminAction {
+
+ @Override
+ public boolean isTransactionAction() {
+ return true;
+ }
+
+ @Override
+ public boolean action(Request request, Response response) {
+ if (request.getNettyRequest() instanceof FullHttpRequest) {
+ SystemSettingPojo inputUserId = getRequestBody(request.getNettyRequest(), SystemSettingPojo.class);
+ if (inputUserId != null
+ && (!StringUtil.isNullOrEmpty(inputUserId.value) || !StringUtil.isNullOrEmpty(inputUserId.desc))) {
+
+
+ boolean success = messagesStore.updateSystemSetting(inputUserId.id, inputUserId.value, inputUserId.desc);
+
+ response.setStatus(HttpResponseStatus.OK);
+ RestResult result;
+ if (!success) {
+ result = RestResult.resultOf(ErrorCode.ERROR_CODE_SERVER_ERROR);
+ } else {
+ result = RestResult.ok();
+ }
+
+ response.setContent(new Gson().toJson(result));
+ } else {
+ response.setStatus(HttpResponseStatus.OK);
+ RestResult result = RestResult.resultOf(ErrorCode.INVALID_PARAMETER);
+ response.setContent(new Gson().toJson(result));
+ }
+
+ }
+ return true;
+ }
+}
diff --git a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java
index 005af50c..1358e816 100644
--- a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java
+++ b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java
@@ -8,6 +8,7 @@
package io.moquette.persistence;
+import cn.wildfirechat.pojos.SystemSettingPojo;
import cn.wildfirechat.proto.ProtoConstants;
import cn.wildfirechat.proto.WFCMessage;
import cn.wildfirechat.server.ThreadPoolExecutorWrapper;
@@ -76,6 +77,79 @@ public class DatabaseStore {
return out;
}
+ boolean updateSystemSetting(int id, String value, String desc) {
+ Connection connection = null;
+ PreparedStatement statement = null;
+ try {
+ connection = DBUtil.getConnection();
+ String sql = "insert into t_settings " +
+ " (`id`, `value`, `desc`) values(?, ?, ?)" +
+ " ON DUPLICATE KEY UPDATE " +
+ "`value` = ?," +
+ "`desc` = ?";
+
+
+ statement = connection.prepareStatement(sql);
+ int index = 1;
+ statement.setLong(index++, id);
+ statement.setString(index++, value);
+ statement.setString(index++, desc);
+ statement.setString(index++, value);
+ statement.setString(index++, desc);
+
+ int count = statement.executeUpdate();
+ LOG.info("Update rows {}", count);
+ return true;
+ } catch (SQLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ Utility.printExecption(LOG, e);
+ } finally {
+ DBUtil.closeDB(connection, statement);
+ }
+ return false;
+ }
+
+ SystemSettingPojo getSystemSetting(int id) {
+ Connection connection = null;
+ PreparedStatement statement = null;
+ ResultSet rs = null;
+
+ try {
+ connection = DBUtil.getConnection();
+ String sql = "select `value`, `desc` from t_settings where `id` = ?";
+
+ statement = connection.prepareStatement(sql);
+ int index = 1;
+ statement.setLong(index++, id);
+
+ rs = statement.executeQuery();
+ while (rs.next()) {
+ SystemSettingPojo out = new SystemSettingPojo();
+ index = 1;
+
+ out.id = id;
+
+ String value = rs.getString(index++);
+ value = (value == null ? "" : value);
+ out.value = value;
+
+ value = rs.getString(index++);
+ value = (value == null ? "" : value);
+ out.desc = value;
+
+ return out;
+ }
+ } catch (SQLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ Utility.printExecption(LOG, e);
+ } finally {
+ DBUtil.closeDB(connection, statement, rs);
+ }
+ return null;
+ }
+
List searchUserFromDB(String keyword, boolean buzzy, int page) {
Connection connection = null;
PreparedStatement statement = null;
diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java
index e7fb0d1b..fc1fa65b 100755
--- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java
+++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java
@@ -16,6 +16,7 @@
package io.moquette.persistence;
+import cn.wildfirechat.pojos.SystemSettingPojo;
import cn.wildfirechat.proto.ProtoConstants;
import cn.wildfirechat.proto.WFCMessage;
import com.google.protobuf.ByteString;
@@ -1442,6 +1443,16 @@ public class MemoryMessagesStore implements IMessagesStore {
return databaseStore.searchUserFromDB(keyword, buzzy, page);
}
+ @Override
+ public boolean updateSystemSetting(int id, String value, String desc) {
+ return databaseStore.updateSystemSetting(id, value, desc);
+ }
+
+ @Override
+ public SystemSettingPojo getSystemSetting(int id) {
+ return databaseStore.getSystemSetting(id);
+ }
+
@Override
public void createChatroom(String chatroomId, WFCMessage.ChatroomInfo chatroomInfo) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java
index 064098e6..7e2341db 100755
--- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java
+++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java
@@ -16,6 +16,7 @@
package io.moquette.spi;
+import cn.wildfirechat.pojos.SystemSettingPojo;
import cn.wildfirechat.proto.WFCMessage;
import com.xiaoleilu.loServer.model.FriendData;
import cn.wildfirechat.pojos.InputOutputUserBlockStatus;
@@ -135,6 +136,8 @@ public interface IMessagesStore {
WFCMessage.User getUserInfoByMobile(String mobile);
List searchUser(String keyword, boolean buzzy, int page);
+ boolean updateSystemSetting(int id, String value, String desc);
+ SystemSettingPojo getSystemSetting(int id);
void createChatroom(String chatroomId, WFCMessage.ChatroomInfo chatroomInfo);
void destoryChatroom(String chatroomId);
WFCMessage.ChatroomInfo getChatroomInfo(String chatroomId);
diff --git a/broker/src/main/resources/c3p0-config.xml b/broker/src/main/resources/c3p0-config.xml
index 0cddeb27..ddbe308f 100755
--- a/broker/src/main/resources/c3p0-config.xml
+++ b/broker/src/main/resources/c3p0-config.xml
@@ -19,7 +19,7 @@
root
- 123456
+ lt123456
10
diff --git a/common/src/main/java/cn.wildfirechat.pojos/SystemSettingPojo.java b/common/src/main/java/cn.wildfirechat.pojos/SystemSettingPojo.java
new file mode 100644
index 00000000..bb712df5
--- /dev/null
+++ b/common/src/main/java/cn.wildfirechat.pojos/SystemSettingPojo.java
@@ -0,0 +1,7 @@
+package cn.wildfirechat.pojos;
+
+public class SystemSettingPojo {
+ public int id;
+ public String value;
+ public String desc;
+}
diff --git a/common/src/main/java/cn/wildfirechat/common/APIPath.java b/common/src/main/java/cn/wildfirechat/common/APIPath.java
index e834f950..8563c194 100644
--- a/common/src/main/java/cn/wildfirechat/common/APIPath.java
+++ b/common/src/main/java/cn/wildfirechat/common/APIPath.java
@@ -35,6 +35,9 @@ public interface APIPath {
String Group_Member_Add = "/admin/group/member/add";
String Group_Member_Kickoff = "/admin/group/member/del";
+ String Get_System_Setting = "/admin/system/get_setting";
+ String Put_System_Setting = "/admin/system/put_setting";
+
String Channel_Message_Send = "/channel/message/send";
diff --git a/common/src/main/java/cn/wildfirechat/proto/ProtoConstants.java b/common/src/main/java/cn/wildfirechat/proto/ProtoConstants.java
index c341d949..7af3511b 100644
--- a/common/src/main/java/cn/wildfirechat/proto/ProtoConstants.java
+++ b/common/src/main/java/cn/wildfirechat/proto/ProtoConstants.java
@@ -128,6 +128,9 @@ public class ProtoConstants {
}
+ public interface SystemSettingType {
+ int Group_Max_Member_Count = 1;
+ }
diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/GeneralAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/GeneralAdmin.java
new file mode 100644
index 00000000..cff264ca
--- /dev/null
+++ b/sdk/src/main/java/cn/wildfirechat/sdk/GeneralAdmin.java
@@ -0,0 +1,27 @@
+package cn.wildfirechat.sdk;
+
+import cn.wildfirechat.common.APIPath;
+import cn.wildfirechat.pojos.InputFriendRequest;
+import cn.wildfirechat.pojos.InputGetFriendList;
+import cn.wildfirechat.pojos.SystemSettingPojo;
+import cn.wildfirechat.sdk.model.IMResult;
+import cn.wildfirechat.sdk.utilities.AdminHttpUtils;
+
+public class GeneralAdmin {
+ public static IMResult getSystemSetting(int id) throws Exception {
+ String path = APIPath.Get_System_Setting;
+ SystemSettingPojo input = new SystemSettingPojo();
+ input.id = id;
+ return AdminHttpUtils.httpJsonPost(path, input, SystemSettingPojo.class);
+ }
+
+ public static IMResult setSystemSetting(int id, String value, String desc) throws Exception {
+ String path = APIPath.Put_System_Setting;
+ SystemSettingPojo input = new SystemSettingPojo();
+ input.id = id;
+ input.value = value;
+ input.desc = desc;
+ return AdminHttpUtils.httpJsonPost(path, input, Void.class);
+ }
+
+}
diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java
index 21d5f4d0..d4500573 100644
--- a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java
+++ b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java
@@ -11,6 +11,8 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import static cn.wildfirechat.proto.ProtoConstants.SystemSettingType.Group_Max_Member_Count;
+
public class Main {
public static void main(String[] args) throws Exception {
//初始化服务API
@@ -293,6 +295,30 @@ public class Main {
}
+ IMResult resultGetSystemSetting = GeneralAdmin.getSystemSetting(Group_Max_Member_Count);
+ if (resultGetSystemSetting != null && resultGetSystemSetting.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
+ System.out.println("success");
+ } else {
+ System.out.println("get system setting failure");
+ System.exit(-1);
+ }
+
+ IMResult resultSetSystemSetting = GeneralAdmin.setSystemSetting(Group_Max_Member_Count, "2000", "最大群人数为2000");
+ if (resultSetSystemSetting != null && resultSetSystemSetting.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
+ System.out.println("success");
+ } else {
+ System.out.println("get system setting failure");
+ System.exit(-1);
+ }
+
+ resultGetSystemSetting = GeneralAdmin.getSystemSetting(Group_Max_Member_Count);
+ if (resultGetSystemSetting != null && resultGetSystemSetting.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS && resultGetSystemSetting.getResult().value.equals("2000")) {
+ System.out.println("success");
+ } else {
+ System.out.println("get system setting failure");
+ System.exit(-1);
+ }
+
//初始化机器人API
RobotHttpUtils.init("http://localhost", "robot1", "123456");
//***********************************************