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"); //***********************************************