Compare commits

...
154 Commits
Author SHA1 Message Date
heavyrian2012 304192e303 version 0.87 2022-04-27 18:42:34 +08:00
heavyrian2012 9490226757 update 2022-04-26 20:12:52 +08:00
heavyrian2012 c44062855b 添加获取单条消息的接口 2022-04-26 20:05:35 +08:00
heavyrian2012 9d96fe927f 添加配置,当删除用户时是否保留用户昵称 2022-04-26 19:50:53 +08:00
heavyrian2012 ef21bd6db3 update readme 2022-04-05 15:26:33 +08:00
imndx dc0b718083 Update README.md 2022-04-01 09:12:05 +08:00
heavyrian2012 c0703332d6 在线状态 2022-03-24 09:49:18 +08:00
heavyrian2012 def048836f 在线状态 2022-03-24 08:38:33 +08:00
heavyrian2012 806cd440e3 修正在线状态问题 2022-03-23 21:45:27 +08:00
heavyrian2012 a3f2623d7e 处理disconnect的在线状态 2022-03-23 19:55:58 +08:00
heavyrian2012 4bc5fd6bb9 version 0.86 2022-03-20 20:34:23 +08:00
heavyrian2012 be2979c9a9 获取在线用户结果的变量改成公开的 2022-03-03 14:31:27 +08:00
heavyrian2012 b7a30e1d14 注释 2022-02-24 21:37:05 +08:00
heavyrian2012 beb591fdc5 version 0.85 2022-02-22 16:16:47 +08:00
heavyrian2012 d090244be9 解决可能内存泄漏的问题 2022-02-22 15:31:50 +08:00
heavyrian2012 22708caaaa 不能反复撤回消息 2022-02-22 15:29:53 +08:00
heavyrain2012 2b24fb9f44 添加conference 服务不可用错误码 2022-02-17 14:55:09 +08:00
heavyrain2012 b8ccab5dde update version to 0.84 2022-02-11 20:20:55 +08:00
heavyrian2012 9d29357ffa 解决使用内置存储文件上传时内存释放问题 2022-02-09 23:04:51 +08:00
heavyrian2012 dabb92571a 定向消息,如果目标用户多于1人,取第一个保存到数据库中 2022-02-09 22:58:48 +08:00
heavyrian2012 acb4cf81de version 0.83 2022-01-29 14:03:11 +08:00
heavyrian2012 ace676d215 修改接受好友后通知其他端的问题 2022-01-29 13:47:34 +08:00
heavyrian2012 1170c4209b fix test code 2022-01-29 11:47:19 +08:00
heavyrian2012 57e8814d9c 同步专业版代码 2022-01-29 11:43:44 +08:00
heavyrian2012 e3d9e0d183 处理好友请求后通知客户端更新好友请求信息 2022-01-26 21:53:35 +08:00
heavyrian2012 d6f5614f49 version 0.82 2022-01-26 13:45:29 +08:00
heavyrian2012 9ed4ab7e08 同步专业版SDK 2022-01-17 19:33:32 +08:00
heavyrian2012 4da3d3421d sdk中添加更新消息的接口 2022-01-13 20:57:02 +08:00
heavyrain2012 40ef9abd35 销毁用户时,清理干净所有信息 2022-01-08 16:36:18 +08:00
heavyrian2012 6f5b021c89 解决在线逻辑错误问题 2022-01-06 09:56:46 +08:00
heavyrian2012 f8f225d741 version 0.81 2022-01-05 14:31:37 +08:00
imndx 546110f6d3 修复存储用户消息错误问题 2022-01-05 11:26:40 +08:00
heavyrain2012 c7dbf45af6 当关闭pc在线通知时可以清理掉历史在线状态 2021-12-30 16:47:00 +08:00
heavyrain2012 1434dafd36 version 0.80 2021-12-29 21:03:34 +08:00
heavyrain2012 0d8a6e64ea log4j 2.17.1 2021-12-29 15:09:10 +08:00
heavyrain2012 d96c201aec add log 2021-12-28 19:30:48 +08:00
heavyrain2012 d901707691 add log 2021-12-28 19:22:55 +08:00
heavyrain2012 f456a4cc65 修正在线状态错误问题 2021-12-26 14:52:23 +08:00
heavyrain2012 c4bd706272 support pad platform 2021-12-26 13:47:01 +08:00
heavyrain2012 503768c04b 获取群组成员信息带上创建时间 2021-12-24 22:19:02 +08:00
heavyrain2012 7ca3abe12d 频道权限问题,非订阅用户可以给全局频道和可以给非订阅用户发消息的频道回复消息 2021-12-24 22:14:04 +08:00
heavyrain2012 cb09026408 添加注释 2021-12-24 22:02:40 +08:00
heavyrain2012 fab381a351 add log 2021-12-24 11:25:47 +08:00
heavyrain2012 a3782b94a8 version 2021-12-23 10:04:17 +08:00
heavyrain2012 3c5ba7f1fa log4j 升级到log4j2 2021-12-23 10:03:36 +08:00
heavyrain2012 24e95ea4db 加入聊天室判断聊天室是否销毁 2021-12-22 10:27:08 +08:00
heavyrain2012 f96f202b58 销毁聊天室时,清理聊天室相关数据 2021-12-22 10:25:31 +08:00
heavyrain2012 29a53955b6 敏感词过滤跳过链接 2021-12-22 09:58:28 +08:00
heavyrain2012 bf081cd416 修改user setting key字段的长度 2021-12-20 08:53:33 +08:00
heavyrain2012 a074b9eac3 频道API发送消息时,如果是自动处理就不发送给频道owner 2021-12-17 21:24:56 +08:00
heavyrain2012 f1b2c546a3 version 0.78 2021-12-14 12:22:44 +08:00
heavyrain2012 52b7b6a9d7 替换新的id生成方法,生成9位id 2021-12-14 12:18:14 +08:00
heavyrain2012 1f03230df5 mysql的关键字段改成大小写敏感 2021-12-14 11:08:01 +08:00
heavyrain2012 b2be0bfdd4 当用户信息更新时通知其他端 2021-12-09 19:40:30 +08:00
heavyrian2012 d6dbf08b8b 解决API修改群组或用户为空时的异常问题 2021-12-09 10:39:38 +08:00
heavyrian2012 ace7435726 修正禁止存储消息searchable字段的错误 2021-12-09 10:14:03 +08:00
heavyrain2012 ef45723043 1,添加是否允许机器人发生自定义群通知的开关;2,重构部分代码 2021-12-07 13:46:14 +08:00
heavyrain2012 9858b6060c deprecated output channelinfo status field 2021-12-06 09:16:02 +08:00
heavyrain2012 05476bb678 兼容旧的server sdk 2021-12-06 09:07:35 +08:00
heavyrain2012 54aa4d5dcf version 0.77 2021-12-06 09:02:23 +08:00
heavyrain2012 c992286af5 测试频道代码修改默认频道属性 2021-12-05 11:04:50 +08:00
heavyrain2012 3ed9381084 解决机器人和频道高压力下错误问题 2021-12-05 11:04:28 +08:00
heavyrain2012 1099c87246 add channel no secret error code 2021-12-04 17:03:01 +08:00
heavyrain2012 e4752c832e 解决频道拉取远程消息错误问题 2021-12-01 20:22:04 +08:00
heavyrain2012 74ac13726e 解决频道API发送中文乱码的问题 2021-12-01 20:21:14 +08:00
heavyrain2012 6ad672be76 server api支持获取频道信息,销毁频道信息,销毁机器人功能 2021-12-01 09:16:29 +08:00
heavyrain2012 63dd936675 channel status refactor to state 2021-11-30 20:12:41 +08:00
heavyrain2012 5ae8e375bf version 0.76 2021-11-29 12:25:34 +08:00
heavyrain2012 d7a0fd29bb update 2021-11-24 20:31:39 +08:00
heavyrain2012 92c59d2fe8 获取远程消息支持按照类型来获取 2021-11-23 13:56:59 +08:00
heavyrain2012 7824fb3844 配置文件添加警告 2021-11-20 11:07:46 +08:00
heavyrain2012 0390d44c63 检查server.ip配置,当没有配置时输出警告 2021-11-20 10:58:30 +08:00
heavyrain2012 4fdc883f25 解决服务地址错误问题 2021-11-20 10:52:35 +08:00
heavyrain2012 3862ab5254 为聊天室增加单独的允许拉取远程消息的开关 2021-11-19 21:12:11 +08:00
heavyrain2012 38002aecc9 Http请求失败时打印详细信息 2021-11-19 20:21:41 +08:00
heavyrain2012 c74cddc387 version 0.75 2021-11-17 16:30:25 +08:00
heavyrain2012 b2e4fd9546 update 2021-11-16 16:50:48 +08:00
heavyrain2012 9e8c364642 机器人不允许获取token和登录 2021-11-16 16:49:09 +08:00
heavyrain2012 8127ec03ad 好友欢迎语排序问题 2021-11-10 11:30:06 +08:00
heavyrain2012 c02e9066be update version 0.74 2021-11-04 15:00:43 +08:00
heavyrain2012 ffd1492ea2 添加限频配置项 2021-10-26 10:11:05 +08:00
heavyrain2012 5e9bbcb1e9 修改注释 2021-10-16 22:20:01 +08:00
heavyrain2012 63770c75fa 修正server api设置好友昵称的问题 2021-10-16 19:43:41 +08:00
heavyrain2012 bf0eb5b8aa 更新注释 2021-10-16 18:12:48 +08:00
heavyrain2012 8cbf66930f 修改注释 2021-10-16 18:11:46 +08:00
heavyrain2012 ce48f67b04 发送好友请求时,如果已经是好友了,返回已经是好友的错误码 2021-10-16 18:03:13 +08:00
heavyrain2012 2fdf11006d 解决双方同时加好友后,有一方接受后,另外一方无法接受问题 2021-10-12 07:59:39 +08:00
heavyrain2012 4a2d7a4cc5 version to 0.73 2021-10-12 07:30:18 +08:00
heavyrain2012 0513da8993 客户端断开链接优化 2021-10-12 07:28:47 +08:00
heavyrain2012 d400b74bff version to 0.72 2021-10-08 12:05:14 +08:00
heavyrain2012 3d7220d79c 优化disconnect功能 2021-10-08 11:07:08 +08:00
heavyrain2012 4bcf784a6d 优化数据库表结构升级日志提示 2021-09-29 19:50:20 +08:00
heavyrain2012 6d021568d3 add log 2021-09-29 19:39:01 +08:00
heavyrain2012 44f54ecd17 提醒消息判断是不是server api发送 2021-09-29 10:19:24 +08:00
heavyrain2012 4cd0349911 提醒消息转发 2021-09-29 10:17:32 +08:00
heavyrain2012 9ad78f2fb8 支持客户端lite mode 2021-09-27 10:28:58 +08:00
heavyrain2012 b284d10d0f version to 0.71 2021-09-24 21:20:40 +08:00
heavyrain2012 4fd87eb605 add run time in version info 2021-09-20 21:01:40 +08:00
heavyrain2012 f39fd3abd5 version info add run time 2021-09-20 20:44:04 +08:00
heavyrain2012 db25a6ae04 解决只有pushdata没有pushcontent的推送问题 2021-09-20 08:42:47 +08:00
heavyrain2012 edbed585ce 撤回消息推送 2021-09-20 08:21:16 +08:00
heavyrain2012 9ca69d7318 添加voip免打扰开关 2021-09-20 08:12:26 +08:00
heavyrain2012 eeaa9eefdf 添加开关
1,是否不转发管理员消息
2,客户端是否支持kickoff事件
2021-09-07 22:07:54 +08:00
heavyrain2012 92c9d761ed add kicked off error code 2021-09-07 08:29:29 +08:00
heavyrain2012 1f9824b283 version to 0.70 2021-09-04 11:23:40 +08:00
heavyrain2012 c7e20632a8 解决单个敏感词无法过滤的问题 2021-09-02 11:55:09 +08:00
heavyrain2012 81a2ab8239 更新命名 2021-09-01 14:48:11 +08:00
heavyrain2012 f62e3f3cef 添加设置用户关系中的附加信息 2021-09-01 14:39:59 +08:00
heavyrain2012 5ce8165514 fix word spell 2021-09-01 13:46:57 +08:00
heavyrain2012 106756ded4 修改敏感词替换错误问题 2021-09-01 13:44:49 +08:00
imndx 3f93be0ece update readme 2021-08-15 10:48:05 +08:00
heavyrain2012 a53f3eb587 version 0.68 -> 0.69 2021-08-13 17:00:02 +08:00
heavyrain2012 d43afb282e 健康检查 2021-08-13 16:37:16 +08:00
heavyrain2012 2f195440cf 更新健康检查内容 2021-08-13 15:06:09 +08:00
heavyrain2012 d241acf980 添加健康检查功能 2021-08-13 12:36:33 +08:00
heavyrain2012 debd4f1aea 解决配置文件中特殊字符问题 2021-08-05 15:44:20 +08:00
heavyrain2012 5a2ded4b6e 回滚错删的配置 2021-07-28 16:16:11 +08:00
heavyrain2012 ca1bdc9ee5 配置文件添加注释 2021-07-28 15:53:28 +08:00
heavyrain2012 b187151683 完善会议API 2021-07-25 12:08:47 +08:00
heavyrain2012 c3859a9fae 当web/pc在线时,手机默认不发出通知 2021-07-23 11:40:04 +08:00
heavyrain2012 c233304a8f version 0.67->0.68 2021-07-23 11:21:14 +08:00
heavyrain2012 affc527326 解决文件不存在时出现的异常 2021-07-23 08:28:11 +08:00
heavyrain2012 07fb4ce511 添加注释 2021-07-22 20:18:16 +08:00
heavyrain2012 ce9f2cbafe 添加开关,确定手机是否默认静音当pc或web在线时 2021-07-22 19:38:14 +08:00
heavyrain2012 2ed81ea629 当好友请求原因为空时,在好友请求接受后,不发送此消息 2021-07-22 16:31:15 +08:00
heavyrain2012 2454067fc3 general admin两个用户设置的接口改为public 2021-07-13 10:10:43 +08:00
heavyrain2012 21a0de04ca 不能尝试兼容加密/未加密的消息,因为有可能错误解出消息,导致不可控结果。 2021-07-12 16:36:38 +08:00
heavyrain2012 f8153d68e8 解决获取原创消息揭秘问题 2021-07-12 15:54:31 +08:00
heavyrain2012 a909e79c50 添加配置是否明文存储消息到数据库 2021-07-12 11:20:26 +08:00
heavyrain2012 c58790ebce 去掉控制台的日志输出 2021-07-06 22:43:22 +08:00
heavyrain2012 0f5b0692af version to 0.67 2021-07-02 11:41:51 +08:00
heavyrain2012 2013e2b6ce SDK复用链接问题 2021-07-01 15:53:04 +08:00
heavyrain2012 35c040c476 解决server api创建群组有部分参数无效问题 2021-07-01 15:10:13 +08:00
heavyrain2012 31472bc5aa 当聊天室不存在时,加入聊天室自动创建聊天室 2021-06-22 11:05:41 +08:00
heavyrain2012 7e812a095f 添加群组成员修改附加信息的功能 2021-06-19 11:34:49 +08:00
heavyrain2012 ec03b4632a server api send friend request force参数错误 2021-06-19 11:34:20 +08:00
heavyrain2012 c1d2c77837 修正新引入的错误 2021-06-19 09:15:51 +08:00
heavyrain2012 5f50455169 添加数据库升级提醒 2021-06-16 14:15:24 +08:00
heavyrain2012 499cfe7602 添加Server SDK 配置对象 2021-06-15 16:28:35 +08:00
heavyrain2012 3b98461946 version 0.65 -> 0.66 2021-06-15 10:58:41 +08:00
imhao183 b10ee75da5 SDK支持多个机器人账户 2021-06-09 16:38:15 +08:00
heavyrain.lee a9792b10ac Update README.md 2021-06-08 13:13:14 +08:00
imhao183 51bfb788ac version 0.64 -> 0.65 2021-06-04 18:01:53 +08:00
dependabot[bot] 82088db682 Bump httpclient from 4.4.1 to 4.5.13 in /broker
Bumps httpclient from 4.4.1 to 4.5.13.

---
updated-dependencies:
- dependency-name: org.apache.httpcomponents:httpclient
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2021-06-04 17:58:45 +08:00
dependabot[bot] 463e3e766a Bump httpclient from 4.5.3 to 4.5.13 in /sdk
Bumps httpclient from 4.5.3 to 4.5.13.

---
updated-dependencies:
- dependency-name: org.apache.httpcomponents:httpclient
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2021-06-04 17:58:34 +08:00
imhao183 4b00b873c3 同步会议参数 2021-06-04 17:52:37 +08:00
imhao183 0c06e28116 解决server api强制添加好友请求时被限制的问题 2021-06-04 17:42:17 +08:00
imndx 7ea6ea08fd update readme 2021-06-01 15:50:07 +08:00
imhao183 b61d292fb5 同步会议API 2021-06-01 08:45:00 +08:00
imhao183 0aba453a24 添加分段同步好友/好友请求/用户设置的功能 2021-05-24 14:44:40 +08:00
imhao183 10ce88de20 更新版本号 2021-05-24 10:31:20 +08:00
imhao183 b0fe3fd57f 解决短链接响应错乱问题 2021-05-24 10:31:09 +08:00
heavyrain2012 141c8f38d8 解决server api 获取群组信息时缺少内容 2021-05-20 11:02:00 +08:00
imhao183 43b325d2d5 添加配置项,可以为内存文件存储添加远程服务地址 2021-05-19 14:02:49 +08:00
243 changed files with 6195 additions and 1394 deletions
+83 -40
View File
@@ -1,49 +1,60 @@
## 野火IM解决方案
# 野火IM解决方案
野火IM是专业级的即时通讯和实时音视频整体解决方案,由北京野火无限网络科技有限公司维护和支持。
野火IM是一套跨平台、核心功能开源的即时通讯解决方案,主要包含以下内容。
## 功能特性
* 超低硬件配置要求,IM服务最低128M内存即可运行。
* 协议先进,采用MQTT+Protobuf组合,流量和性能极致优化。
* 性能强大,专业版IM服务支持百万在线和集群部署。
* 部署运维简单,依赖服务少,稍加配置一键启动。
* 安全加密。网络连接AES加密。客户端数据库SqlCipher加密。安全无小事。
* 全平台客户端,四端同时在线(移动端,pc端,web端和小程序端),数据和状态多端完美同步。
* 支持国产化。支持国产化操作系统、国产化芯片和国产操作系统。支持国密加密。
* 客户端使用微信[mars](https://github.com/tencent/mars)连接库,野火IM可能是最适应中国网络国情的即时通讯服务。
* 支持加速点加速,即可用于全球应用,也可用于政企内外双网复杂的网络环境。
* 支持阅读回执和在线状态功能,适用于办公环境。
* 音视频多种解决方案,丰俭由人,可自由选择。
* 高级音视频功能强大,支持9人以上的群组视频通话,支持1080P视频,支持会议模式,支持百人以上会议,支持服务器端录制。
* 全私有部署,可不依赖任何第三方服务,完全内网部署。
* 功能齐全,涵盖所有常见即时通讯功能。另外具有强大的可扩展能力。Demo成熟完善,基本可以做到开箱即用,也可把SDK嵌入其它应用。
* API丰富,方便与其它服务系统的对接。
* 拥有机器人和频道功能。
| 仓库 | 说明 | 备注 |
| ------------------------------------------------------------ | ------------------------------------------------------- | ---- |
| [android-chat](https://github.com/wildfirechat/android-chat) | 野火IM Android SDK源码和App源码 |可以很方便地进行二次开发,或集成到现有应用当中 |
| [ios-chat](https://github.com/wildfirechat/ios-chat) | 野火IM iOS SDK源码和App源码 |可以很方便地进行二次开发,或集成到现有应用当中 |
| [pc-chat](https://github.com/wildfirechat/pc-chat) | 基于[Electron](https://electronjs.org/)开发的PC平台应用 | |
| [web-chat](https://github.com/wildfirechat/web-chat) | Web平台的Demo, [体验地址](http://web.wildfirechat.net) | |
| [wx-chat](https://github.com/wildfirechat/wx-chat) | 微信小程序平台的Demo | |
| [server](https://github.com/wildfirechat/server) | IM server | |
| [app server](https://github.com/wildfirechat/app_server) | 应用服务端 | |
| [robot_server](https://github.com/wildfirechat/robot_server) | 机器人服务端 | |
| [push_server](https://github.com/wildfirechat/push_server) | 推送服务器 | |
| [docs](https://github.com/wildfirechat/docs) | 野火IM相关文档,包含设计、概念、开发、使用说明 | | | |
## 野火开源项目
主要包括一下项目:
# server
本工程为野火IM 社区版IM服务软件。野火IM作为一个通用的即时通讯解决方案,可以集成到各种应用中。请阅读[docs](http://docs.wildfirechat.net)或下载服务器[发布版本](https://github.com/wildfirechat/server/releases)
| [GitHub仓库地址(主站)](https://github.com/wildfirechat) | [码云仓库地址(镜像)](https://gitee.com/wfchat) | 说明
| ------------------------------------------------------------ | ----------------------------------------------------- | --------------------------------------------------------------------------
| [im-server](https://github.com/wildfirechat/im-server) | [im-server](https://gitee.com/wfchat/im-server) | 野火社区版IM服务,野火IM的核心服务,处理所有IM相关业务。 |
| [app_server](https://github.com/wildfirechat/app_server) | [app_server](https://gitee.com/wfchat/app_server) | Demo应用服务,模拟客户的应用服登陆处理逻辑及部分二次开发示例。 |
| [robot_server](https://github.com/wildfirechat/robot_server) | [robot_server](https://gitee.com/wfchat/robot_server) | 机器人服务,演示野火机器人对接其它系统的方法。 |
| [push_server](https://github.com/wildfirechat/push_server) | [push_server](https://gitee.com/wfchat/push_server) | 推送服务器,可以对接所有的系统厂商推送服务或者第三方推送服务。 |
| [wf-minio](https://github.com/wildfirechat/WF-minio) | [wf-minio](https://gitee.com/wfchat/WF-minio) | 私有对象存储服务,用来支持野火IM专业版的文件存储。 |
| [wf-janus](https://github.com/wildfirechat/wf-janus ) | [wf-janus](https://gitee.com/wfchat/wf-janus ) | 高级音视频媒体服务。 |
| [android-chat](https://github.com/wildfirechat/android-chat) | [android-chat](https://gitee.com/wfchat/android-chat) | 野火IM Android SDK源码和App源码。
| [ios-chat](https://github.com/wildfirechat/ios-chat) | [ios-chat](https://gitee.com/wfchat/ios-chat) | 野火IM iOS SDK源码和App源码。
| [pc-chat](https://github.com/wildfirechat/vue-pc-chat) | [pc-chat](https://gitee.com/wfchat/vue-pc-chat) | 基于[Electron](https://electronjs.org/)的PC 端,支持Windows、Mac、Linux(包括国产化linux系统和CPU)。 |
| [web-chat](https://github.com/wildfirechat/vue-chat) | [web-chat](https://gitee.com/wfchat/vue-chat) | 野火IM Web 端, [体验地址](https://web.wildfirechat.cn) |
| [wx-chat](https://github.com/wildfirechat/wx-chat) | [wx-chat](https://gitee.com/wfchat/wx-chat) | 小程序平台的Demo(支持微信、百度、阿里、字节、QQ 等小程序平台) |
| [docs](https://github.com/wildfirechat/docs) | [docs](https://gitee.com/wfchat/docs) | 野火IM相关文档,包含设计、概念、开发、使用说明,[在线查看](https://docs.wildfirechat.cn/) |
## 野火开发文档
[在线文档](https://docs.wildfirechat.cn/)
开发一套IM系统真的很艰辛,请路过的朋友们给点个star,支持我们坚持下去🙏🙏🙏🙏🙏
### 联系我们
> 商务合作请优先采用邮箱和我们联系。技术问题请到[野火IM论坛](http://bbs.wildfirechat.cn/)发帖交流
1. heavyrain.lee 邮箱: heavyrain.lee@wildfirechat.cn 微信:wildfirechat
2. imndx 邮箱: imndx@wildfirechat.cn 微信:wfchat
### 问题交流
1. 如果大家发现bug,请在GitHub提issue
2. 其他问题,请到[野火IM论坛](http://bbs.wildfirechat.cn/)进行交流学习
3. 微信公众号
<img src="http://static.wildfirechat.cn/wx_wfc_qrcode.jpg" width = 50% height = 50% />
> 强烈建议关注我们的公众号。我们有新版本发布或者有重大更新会通过公众号通知大家,另外我们也会不定期的发布一些关于野火IM的技术介绍。
#### 体验Demo
我们提供了体验demo,请使用微信扫码下载安装体验
## 野火Demo
请使用微信扫码下载安装体验野火IM移动客户端
![野火IM](http://static.wildfirechat.cn/download_qrcode.png)
#### 应用截图
Web客户端点击[这里](https://web.wildfirechat.cn)
PC客户端点[这里](https://github.com/wildfirechat/vue-pc-chat/releases)下载安装。
小程序客户端请用微信扫码
![野火IM](http://static.wildfirechat.net/wx.jpg)
## 应用截图
![ios-demo](http://static.wildfirechat.cn/ios-demo.gif)
<img src="http://static.wildfirechat.cn/ios-message-view.png" width = 50% height = 50% />
@@ -66,16 +77,49 @@
<img src="http://static.wildfirechat.cn/ios-voip-view.png" width = 50% height = 50% />
## 编译
在安装JDK1.8以上及maven的前提下,在命令行中执行```mvn clean compile package```,生成的目标文件在```./distribution/target/distribution-xxxx-bundle-tar.tar.gz```
在安装JDK1.8以上及maven的前提下,在命令行中执行```mvn clean package```,生成的目标文件在```./distribution/target/distribution-xxxx-bundle-tar.tar.gz```
> 由于使用了一个git的maven插件,如果本地没有git信息就会编译出错,请使用```git clone```的方法下载代码,或者下载压缩包解压后在根目录创建```.git```的空目录。建议用```git clone```的方式下载代码。
## 配置
解压```distribution-xxxx-bundle-tar.tar.gz```,修改解压出来的```config```目录下的```wildfirechat.conf```。修改如下部分:
1. 修改```server.ip```为您的服务器的公网IP,或者域名。如果用域名需要做好域名解析。
2. 可以阅读配置文件注释和文档,对其它配置项进行调整。
## 运行
在程序目录运行如下命令:
```
./bin/wildfirechat.sh
```
## 验证
1. 在浏览器中输入地址 ```http://${ip}/api/version```可以看到返回一个json文件。
2. 部署[应用服务](应用服务),配置和编译[Android客户端](https://github.com/wildfirechat/android-chat)和[iOS客户端](https://github.com/wildfirechat/ios-chat)进行验证。详情可参考[快速开始](https://docs.wildfirechat.cn/quick_start/)。
## 升级说明
1. 从0.42 版本增加了群成员数限制,默认为2000。如果您从之前的版本升级到这个版本或以后,需要注意到群成员数的限制。升级之后超出限制的群不受影响,但不能继续加人,如果您想修改默认值,可以在升级版本之后,修改t_setting表,把默认的大小改为您期望的人数。另外修改t_group表,把已经存在的群组max_member_count改成您期望的,然后重启。
2. 0.46和0.47版本升级到0.48及以后版本时,可能会提示flyway migrate 38错误,请执行 [修复脚本](https://github.com/wildfirechat/server/blob/wildfirechat/flyway_repaire_migrate_38.sql) 进行修复。0.46和0.47版本之外的版本不会出现此问题。
3. 从0.54之前版本升级到0.54及以后版本时,会提示flyway migrate错误。因为0.54版本删除了sql脚本中默认敏感词的内容,flyway checksum失败。请执行```update flyway_schema_history set checksum = 0 where script = 'V17__add_default_sensitive_word.sql';```来修复。
4. 从0.59之前的版本升级到之后的版本执行数据库升级时间比较长,请耐心等待提示运行成功,避免中途中断。
## 联系我们
商务合作请使用如下邮箱和微信联系:
邮箱: support@wildfirechat.cn 微信1:wfchat 微信2:wildfirechat
## 问题交流
1. 如果大家发现bug,请在GitHub提issue;如果有需求也请给我们提issue。
2. 其他问题,请到[野火IM论坛](http://bbs.wildfirechat.cn/)进行交流学习
3. 关注我们的公众号。我们有新版本发布或者有重大更新会通过公众号通知大家,另外我们也会不定期的发布一些关于野火IM的技术介绍。
<img src="http://static.wildfirechat.cn/wx_wfc_qrcode.jpg" width = 50% height = 50% />
> 我们有研发工程师轮流值班处理issue和论坛,一般简单问题几个小时就会回复一遍,疑难Bug的修改和新需求的开发我们也会尽快解决。
## 特别感谢
1. [moquette](https://github.com/moquette-io/moquette) 本项目是基于此项目二次开发而来,处理MQTT相关业务。
2. [loServer](https://github.com/looly/loServer) 本项目使用loServer处理HTTP相关业务。
@@ -85,4 +129,3 @@
## License
1. Under the Creative Commons Attribution-NoDerivs 3.0 Unported license. See the [LICENSE](https://github.com/wildfirechat/server/blob/wildfirechat/LICENSE) file for details.
2. Under the Anti 996 License. See the [Anti 996 LICENSE](https://github.com/wildfirechat/server/blob/wildfirechat/LICENSE_996) file for details.
+4
View File
@@ -13,6 +13,10 @@
</join>
</network>
<properties>
<property name="hazelcast.logging.type">slf4j</property>
</properties>
<!-- map eviction -->
<!-- http://docs.hazelcast.org/docs/latest-development/manual/html/Distributed_Data_Structures/Map/Map_Eviction.html -->
<map name="messages_map">
+85 -19
View File
@@ -11,13 +11,13 @@
#*********************************************************************
#服务器的接入IP。给客户端提供是${server.ip}和${http_port}。
#客户端会从${http_port}端口获取到长链接端口。这个地址一定要改成客户端可以访问到的IP地址
# (如果您部署云服务器上或者具有独立公网出口的服务器上,请改为对应的公网IP;如果您部署在在内网环境下,在内网使用,这个地方改成内网地址)
#(如果您部署云服务器上或者具有独立公网出口的服务器上,请改为对应的公网IP;如果您部署在在内网环境下,在内网使用,这个地方改成内网地址)
server.ip 192.168.3.124
##原生客户端长链接端口
port 1883
##客户端短链接端口
##客户端短链接端口,客户端固定使用80端口,不要修改此端口。
http_port 80
#管理端口
@@ -32,15 +32,16 @@ host 0.0.0.0
##本地绑定端口
local_port 80
##是否使用内置DB。0使用mysql;1使用h2db;2使用mysql+mongodb。社区版只支持0和1,专业版支持2
## 是否使用内置DB。0使用mysql;1使用h2db。
## MySQL需要把事物隔离级别改成"Read committed",使用命令来修改"set global transaction_isolation='read-committed';",其他数据库默认已经是这个级别不用修改
embed.db 1
## 是否自动清理历史消息记录,当为true时,IM服务会定时扫描t_messages_x和t_user_messages_x表,清除掉3年前的历史消息。
## 如果不开启自动清理,需要手动清理t_messages_x和t_user_messages_x表内的历史数据,保存数据不能超过3年。
## 使用mongodb时次开关无效(因为mongodb设置了消息过期时间,会自动清理)。
## 使用mongodb时次开关无效(因为mongodb设置了消息过期时间,会自动清理,仅专业版支持mongodb)。
db.auto_clean_history_messages true
##服务器管理接口密钥
##服务器管理接口密钥。如果修改此端口需要同步修改使用管理API的地方,比如应用服务。
http.admin.secret_key 123456
##服务器API接口参数是否检查时间。当设置为false时,所有的请求会检查时间的有效性;当设置为true时,可以在http.admin.secret_key保持不变的情况下,使用固定的服务API签名
@@ -65,6 +66,9 @@ message.remote_history_message 0
##服务器为每个用户缓存的消息数量。这个值改得太大,拉取消息时间变长,另外会占用大量内存。
message.max_queue 1024
##是否开启拉取聊天室远程历史消息。如果为1,可以下拉继续加载在服务器上的该聊天室的消息;如果为0则不能。默认为1
message.chatroom_remote_history_message 1
##是否禁止陌生人聊天
message.disable_stranger_chat false
@@ -74,14 +78,21 @@ message.blacklist.strategy 0
##是否禁止服务器端消息搜索,该功能暂未实现。目前的影响是如果打开,则存储消息时不单独保存_searchable_content字段
message.disable_remote_search false
##允许客户端撤回用户自己发送的消息时限,单位是秒。群组管理员或群主撤回群成员消息、server api不受此限制,可以撤回任意时限内的消息
##是否数据库中加密消息内容。注意这个开关在服务运行起来后不能改变了,避免读取数据库时无法恢复历史消息。
##如果要避免数据库中明文存储消息内容,请打开这个开关和message.disable_remote_search开关
message.encrypt_message_content false
##允许客户端撤回用户自己发送的消息时限,单位是秒。
##Server API不受此限制,可以撤回任意时限内的消息
##群组管理员或群主撤回群成员消息不受此限制,可以撤回任意时限内的消息。但管理员或群主撤回自己的消息还是需要准守此时间限制。
##修改此参数需要同步修改客户端UI,客户端UI代码有判断撤回是否显示的逻辑。
message.recall_time_limit 120
##禁止群主/群管理员撤回群内消息,关闭时群主/群管理员可以撤回任意时间段内群内成员的消息,群主/群管理员撤回自己发送的消息还是会受到message.recall_time_limit时间限制。
##禁止群主/群管理员撤回群内消息,关闭时群主/群管理员可以撤回任意时间段内群内成员的消息。
message.disable_group_manager_recall false
## 禁止客户端发送消息类型,消息类型以逗号分开,下面3个值为示例,可以删除。
## 一般用于重要类型消息,比如交易、充值等,禁止客户端发送,仅限于服务器发送,提高安全性。
##禁止客户端发送消息类型,消息类型以逗号分开,下面3个值为示例,可以删除。
##一般用于重要类型消息,比如交易、充值等,禁止客户端发送,仅限于服务器发送,提高安全性。
#message.forbidden_client_send_types 3999,4000,4001
## 当禁止发送消息时,允许例外发送的消息。这种一般用户需要被动回应的消息。比如群中被禁言的用户,他无法主动发起音视频,但可以接听未被禁言用户的音视频
@@ -93,28 +104,33 @@ message.group_mute_exception_types 401,402,403,404,405,407,408,410,411
## 用户被全局禁言时允许发送的消息类型
message.global_mute_exception_types 401,402,403,404,405,407,408,410,411
## 消息转发功能开启时,开关是否不转发server api接口消息。
## 当为true时,不转发server api发送的消息;当为false时,转发server api发送的消息。
message.no_forward_admin_message false
##禁止搜索用户
friend.disable_search false
##禁止按照昵称搜索用户。
friend.disable_nick_name_search false
##禁止发送好友邀请,通过server api添加好友不受此限制
##禁止发送好友邀请,通过server api添加好友不受此限制(force参数需要为true)
friend.disable_friend_request false
##好友请求重复发送的间隔,单位是毫秒,默认是7天,0为不限制
##好友请求重复发送的间隔,单位是毫秒,默认是7天,0为无限长期限。
friend.repeat_request_duration 604800000
##好友请求被拒绝后再次发送的间隔,单位是毫秒,默认是30天,0为不限制
##好友请求被拒绝后再次发送的间隔,单位是毫秒,默认是30天,0为不限制。不能小于friend.repeat_request_duration。
friend.reject_request_duration 2592000000
##好友请求过期时间,单位是毫秒,默认是7天,0为不限制
##好友请求过期时间,单位是毫秒,默认是7天,0为无限长期限。
friend.request_expiration_duration 604800000
##添加好友后会发送欢迎消息,比如"你们已经是好友了,可以聊天了"。这个开关控制是用旧的方式还是用新的方式。
##旧的方式会发送notification消息(contenttype是80),内容会根据好友接收者的语言选择对应的语言,如果双方语言不一致会导致另外一方看到的不是本地语言。
##新的方式会发送添加好友消息(contenttype是93)和欢迎消息(contenttype是92),需要客户端实现这两种消息。
##如果客户端已经实现这两种消息可以打开这个开关
##如果客户端已经实现这两种消息可以打开这个开关(客户端2020.6.30添加了此消息类型)。
friend.new_welcome_message true
## 聊天室观众空闲退出时间,单位为毫秒,默认为15分钟,0为永远不退出
@@ -123,9 +139,15 @@ chatroom.participant_idle_time 900000
## 用户向聊天室发送消息,自动加入聊天室
chatroom.rejoin_when_active true
## 当一个聊天室不存在时,如果有用户加入就自动创建
chatroom.create_when_not_exist true
## 是否允许客户端发送操作群的自定义群通知消息
group.allow_client_custom_operation_notification true
## 是否允许机器人发送操作群的自定义群通知消息
group.allow_robot_custom_operation_notification true
## 当群成员退出或者被移除时,是否同时给管理员和相关人员发送显式通知消息。
## 0 不发送,1 退群时发送,2 踢人时发送,3 退群和踢人时都发送。
group.visible_quit_or_kickoff_notification 0
@@ -135,6 +157,27 @@ group.visible_quit_or_kickoff_notification 0
## 注意,修改本配置不会对已经同步的信息产生影响。
#user.hide_properties 3,4,5
## 销毁用户时,用户信息会被清空,deleted字段设置为1,这个开关控制是否保留用户昵称,默认为true。
user.keep_display_name_when_destroy true
# 好友/好友请求/用户设置 这三类数据同步的最大条目数。之前是客户第一次登录时,会把所有的对应数据一次下载到客户端,但如果有特别多的信息,会导致无法同步到客户端,
# 因此需要分段多次同步,此开关定义了每次同步的数据的条数。此需要客户端支持,客户端SDK在2021.5.25日后支持此功能。如果确认所有客户端都在这个日志之后才可以打开此设置。
#sync.data_part_size 1000
#*********************************************************************
# 限频配置
#*********************************************************************
##API接口限频设置,时间是10秒内允许的请求次数。
##管理api频率限制,默认是10秒10000次。
http.admin.rate_limit 10000
##机器人api频率限制,默认是10秒1000次,按照机器人ID区分。
http.robot.rate_limit 1000
##频道api频率限制,默认是10秒1000次,按照频道ID区分。
http.channel.rate_limit 1000
##客户端请求频率限制,默认是5秒100次。通常情况下不要修改这个值。
client.request_rate_limit 100
#*********************************************************************
# hazelcase configuration
#*********************************************************************
@@ -144,7 +187,8 @@ hazelcast.configuration config/hazelcast.xml
# Media server configuration
#*********************************************************************
##是否使用七牛云存储。1使用七牛;0使用内存文件服务器。默认的七牛账户信息不可用,请在七牛官网申请账户并配置
## https://docs.wildfirechat.cn/server/media_server.html
##专业版另外支持阿里云存储和野火私有存储,关于野火私有存储请参考:https://github.com/wildfirechat/WF-minio
##关于对象存储的详细信息请参考:https://docs.wildfirechat.cn/server/oss.html
media.server.use_qiniu 0
##媒体类型分类
@@ -183,12 +227,27 @@ qiniu.bucket_favorite_domain http://cdn2.wildfirechat.cn
# local media server configuration
# 本地媒体服务器配置。
local.media.storage.root media
# 如果使用内置文件存储,文件上传后地址默认为 http://server.ip:http_port/fs/5/2021/03/27/08/filename。
# 如果需要使用nginx添加https支持,请打开下面配置,这样客户端得到的文件地址为 https://example.com/media/fs/5/2021/03/27/08/filename。
# 需要nginx把请求从https://example.com/media/fs 转到 http://server.ip:http_port/fs。注意需要带上所有header。
# 尽管内置文件存储可以使用,但是我们还是建议使用专业级别的对象存储服务,社区版可以使用七牛,专业版另外支持阿里云和也是私有对象存储。详情请参考 https://docs.wildfirechat.cn/server/oss.html
# local.media.storage.remote_server_url https://example.com/media
# 是否支持多端登陆,为true时支持任意平台任意多个客户端同时登录;为false时每个平台只支持一个端登录,但不同平台可以同时登录。
# 是否支持任意多端登陆,为true时支持任意平台任意多个客户端同时登录;为false时每个平台只支持一个端登录,但不同平台可以同时登录。
# Android/iOS为移动平台,windows/mac/linux为pc平台,web为web平台,小程序为小程序平台。
# 建议使用false
server.multi_endpoint false
# 多平台连接状态通知(仅当multi_endpoint为false时有效),true时移动端可以收到pc或web端登录的通知。
server.multi_platform_notification false
server.multi_platform_notification true
# 当pc或者web在线时,手机是否默认静音,默认为true。注意仅影响默认值,用户可以手动切换是否静音。
# 如果这里改为false,客户端那边需要同步修改pc在线默认通知状态,方法是client的setDefaultSilentWhenPcOnline函数。
server.mobile_default_silent_when_pc_online true
## 客户端是否支持kickoff事件。当客户端被其他端登录踢出时,如果此开关为false时,客户端协议栈上报secret_mismatch。如果此开关为ture时,客户端协议栈上报kicked_off。
## 客户端被踢时上报kicked_off是在2021.9.15之后才加上的。如果客户端协议栈全部为此日期之后的版本才可以打开此开关。
server.client_support_kickoff_event false
#*********************************************************************
# Push server configuration
@@ -205,6 +264,8 @@ push.ios.server.address http://localhost:8085/ios/push
#*********************************************************************
# 监控配置
#*********************************************************************
##异常事件产生回调
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#monitor.exception_event_address http://localhost:8888/im_exception_event/
#*********************************************************************
@@ -228,6 +289,11 @@ push.ios.server.address http://localhost:8085/ios/push
##需要转发的消息类型,当有多个时以英文逗号分割。如果转发所有消息,请注释掉配置或者设置为空
#message.forward.types 1,2,3
##提醒消息转发地址,@全体用户和@某个用户消息会回调此地址。此转发不受${message.forward.types}限制。
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#message.mentionmsg.forward.url http://localhost:8888/im_event/message
##设备信息转发地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#things_message.forward.url http://localhost:8888/im_event/things/message
@@ -264,7 +330,7 @@ sensitive.filter.type 0
#sensitive.remote_server_url http://192.168.3.202:8888/message/censor
## 需要进行敏感词审核的消息类型,当有多个时以英文逗号分割
#sensitive.remote_sensitive_message_type 1,2,3
## 如果远程审核服务返回403,返回给发送端发送失败还是成功?实际上这个值影响发送响应是否等待审核结果,当为false时,消息发送给审核服务就立即返回
## 成功给客户端。当为true时,消息发送给审核服务,等待审核结果,如果结果为继续发送就返回给客户端为成功,结果为禁止发送就返回失败给客户端。
## 如果远程审核服务返回403,返回给发送端发送失败还是成功?实际上这个值影响发送响应是否等待审核结果,当为false时,消息发送给审核服务就立即返回成功给客户端。
## 当为true时,消息发送给审核服务,等待审核结果,如果结果为继续发送就返回给客户端为成功,结果为禁止发送就返回失败给客户端。
## 客户端操作的超时一般为10s左右,且考虑到复杂的网络情况,建议处理时间不要超过3s。建议这个值为false。
#sensitive.remote_fail_when_matched false
+1
View File
@@ -0,0 +1 @@
alter table `t_user_messages` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
+1
View File
@@ -0,0 +1 @@
alter table `t_user_setting` modify column `_key` varchar(128) NOT NULL;
+257
View File
@@ -0,0 +1,257 @@
alter table `t_user_messages` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_0` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_1` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_2` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_3` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_4` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_5` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_6` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_7` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_8` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_9` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_10` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_11` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_12` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_13` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_14` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_15` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_16` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_17` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_18` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_19` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_20` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_21` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_22` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_23` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_24` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_25` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_26` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_27` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_28` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_29` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_30` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_31` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_32` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_33` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_34` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_35` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_36` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_37` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_38` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_39` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_40` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_41` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_42` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_43` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_44` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_45` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_46` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_47` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_48` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_49` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_50` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_51` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_52` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_53` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_54` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_55` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_56` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_57` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_58` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_59` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_60` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_61` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_62` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_63` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_64` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_65` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_66` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_67` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_68` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_69` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_70` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_71` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_72` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_73` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_74` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_75` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_76` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_77` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_78` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_79` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_80` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_81` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_82` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_83` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_84` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_85` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_86` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_87` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_88` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_89` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_90` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_91` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_92` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_93` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_94` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_95` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_96` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_97` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_98` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_99` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_100` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_101` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_102` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_103` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_104` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_105` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_106` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_107` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_108` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_109` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_110` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_111` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_112` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_113` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_114` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_115` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_116` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_117` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_118` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_119` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_120` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_121` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_122` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_123` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_124` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_125` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_126` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
alter table `t_user_messages_127` add column `_cont_type` int(11) NOT NULL DEFAULT '0';
@@ -0,0 +1,599 @@
ALTER TABLE `t_channel` MODIFY COLUMN `_cid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_channel` MODIFY COLUMN `_owner` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_channel_listener` MODIFY COLUMN `_cid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_channel_listener` MODIFY COLUMN `_mid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_chatroom` MODIFY COLUMN `_cid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_chatroom_blacklist` MODIFY COLUMN `_cid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_chatroom_blacklist` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_chatroom_manager` MODIFY COLUMN `_cid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_chatroom_manager` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_delivery_report` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_device` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_file` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_file` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_friend` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_friend` MODIFY COLUMN `_friend_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_friend_request` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_friend_request` MODIFY COLUMN `_friend_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_group` MODIFY COLUMN `_gid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_group` MODIFY COLUMN `_owner` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '';
ALTER TABLE `t_group_member` MODIFY COLUMN `_gid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_group_member` MODIFY COLUMN `_mid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_0` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_0` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_0` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_1` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_1` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_1` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_10` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_10` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_10` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_11` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_11` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_11` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_12` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_12` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_12` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_13` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_13` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_13` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_14` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_14` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_14` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_15` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_15` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_15` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_16` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_16` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_16` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_17` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_17` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_17` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_18` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_18` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_18` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_19` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_19` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_19` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_2` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_2` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_2` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_20` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_20` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_20` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_21` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_21` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_21` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_22` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_22` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_22` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_23` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_23` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_23` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_24` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_24` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_24` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_25` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_25` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_25` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_26` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_26` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_26` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_27` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_27` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_27` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_28` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_28` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_28` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_29` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_29` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_29` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_3` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_3` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_3` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_30` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_30` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_30` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_31` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_31` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_31` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_32` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_32` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_32` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_33` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_33` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_33` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_34` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_34` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_34` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_35` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_35` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_35` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_4` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_4` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_4` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_5` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_5` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_5` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_6` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_6` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_6` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_7` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_7` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_7` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_8` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_8` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_8` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_messages_9` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_9` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_messages_9` MODIFY COLUMN `_to` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_read_report` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_read_report` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_robot` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_robot` MODIFY COLUMN `_owner` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '';
ALTER TABLE `t_sensitive_messages` MODIFY COLUMN `_from` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_sensitive_messages` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_session` MODIFY COLUMN `row_id` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user` MODIFY COLUMN `_name` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_delivery_report` MODIFY COLUMN `_rid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_delivery_report` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_device` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_device` MODIFY COLUMN `_did` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_0` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_0` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_1` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_1` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_10` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_10` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_100` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_100` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_101` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_101` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_102` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_102` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_103` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_103` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_104` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_104` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_105` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_105` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_106` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_106` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_107` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_107` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_108` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_108` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_109` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_109` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_11` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_11` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_110` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_110` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_111` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_111` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_112` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_112` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_113` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_113` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_114` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_114` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_115` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_115` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_116` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_116` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_117` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_117` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_118` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_118` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_119` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_119` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_12` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_12` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_120` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_120` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_121` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_121` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_122` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_122` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_123` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_123` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_124` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_124` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_125` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_125` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_126` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_126` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_127` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_127` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_13` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_13` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_14` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_14` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_15` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_15` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_16` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_16` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_17` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_17` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_18` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_18` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_19` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_19` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_2` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_2` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_20` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_20` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_21` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_21` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_22` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_22` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_23` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_23` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_24` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_24` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_25` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_25` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_26` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_26` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_27` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_27` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_28` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_28` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_29` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_29` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_3` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_3` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_30` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_30` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_31` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_31` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_32` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_32` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_33` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_33` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_34` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_34` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_35` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_35` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_36` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_36` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_37` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_37` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_38` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_38` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_39` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_39` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_4` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_4` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_40` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_40` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_41` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_41` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_42` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_42` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_43` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_43` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_44` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_44` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_45` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_45` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_46` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_46` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_47` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_47` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_48` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_48` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_49` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_49` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_5` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_5` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_50` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_50` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_51` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_51` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_52` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_52` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_53` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_53` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_54` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_54` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_55` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_55` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_56` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_56` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_57` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_57` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_58` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_58` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_59` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_59` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_6` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_6` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_60` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_60` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_61` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_61` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_62` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_62` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_63` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_63` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_64` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_64` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_65` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_65` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_66` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_66` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_67` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_67` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_68` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_68` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_69` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_69` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_7` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_7` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_70` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_70` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_71` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_71` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_72` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_72` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_73` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_73` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_74` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_74` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_75` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_75` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_76` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_76` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_77` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_77` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_78` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_78` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_79` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_79` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_8` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_8` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_80` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_80` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_81` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_81` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_82` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_82` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_83` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_83` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_84` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_84` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_85` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_85` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_86` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_86` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_87` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_87` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_88` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_88` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_89` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_89` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_9` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_9` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_90` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_90` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_91` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_91` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_92` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_92` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_93` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_93` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_94` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_94` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_95` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_95` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_96` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_96` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_97` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_97` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_98` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_98` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_99` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_messages_99` MODIFY COLUMN `_target` VARCHAR(129) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_read_report` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_session` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_session` MODIFY COLUMN `_cid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_session` MODIFY COLUMN `_token` VARCHAR(240) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_user_setting` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_setting` MODIFY COLUMN `_key` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `t_user_status` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
+3
View File
@@ -0,0 +1,3 @@
ALTER TABLE `t_read_report` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `t_read_report` MODIFY COLUMN `_target` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
@@ -0,0 +1 @@
alter table `t_user_setting` modify column `_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
+27 -19
View File
@@ -5,7 +5,7 @@
<relativePath>../</relativePath>
<artifactId>wildfirechat-parent</artifactId>
<groupId>cn.wildfirechat</groupId>
<version>0.63</version>
<version>0.87</version>
</parent>
<artifactId>moquette-broker</artifactId>
@@ -18,30 +18,38 @@
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>cn.wildfirechat</groupId>
<artifactId>common</artifactId>
<version>${project.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version>
</dependency>
<!--用于与slf4j保持桥接-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.1</version>
</dependency>
<!-- slf4j核心包-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
@@ -84,7 +92,7 @@
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4.1</version>
<version>4.5.13</version>
</dependency>
<dependency>
@@ -32,6 +32,7 @@ public class PushMessage {
public String voipDeviceToken;
public boolean isHiddenDetail;
public String language;
public long messageId;
public PushMessage(String sender, int conversationType, String target, int line, int messageContentType, long serverTime, String senderName, String targetName, int unReceivedMsg, int mentionedType, boolean isHiddenDetail, String language) {
this.sender = sender;
@@ -49,6 +50,10 @@ public class PushMessage {
this.pushMessageType = PushServer.PushMessageType.PUSH_MESSAGE_TYPE_VOIP_BYE;
} else if(cntType == 401) {
this.pushMessageType = PushServer.PushMessageType.PUSH_MESSAGE_TYPE_VOIP_ANSWER;
} else if(cntType == 80) {
this.pushMessageType = PushServer.PushMessageType.PUSH_MESSAGE_TYPE_RECALLED;
} else if(cntType == 81) {
this.pushMessageType = PushServer.PushMessageType.PUSH_MESSAGE_TYPE_DELETED;
} else {
this.pushMessageType = PushServer.PushMessageType.PUSH_MESSAGE_TYPE_NORMAL;
}
@@ -25,6 +25,7 @@ import java.util.concurrent.Executors;
import static io.moquette.BrokerConstants.PUSH_ANDROID_SERVER_ADDRESS;
import static io.moquette.BrokerConstants.PUSH_IOS_SERVER_ADDRESS;
import static win.liyufan.im.HttpUtils.HttpPostType.POST_TYPE_Push;
public class PushServer {
private static final Logger LOG = LoggerFactory.getLogger(PushServer.class);
@@ -35,6 +36,8 @@ public class PushServer {
int PUSH_MESSAGE_TYPE_VOIP_BYE = 2;
int PUSH_MESSAGE_TYPE_FRIEND_REQUEST = 3;
int PUSH_MESSAGE_TYPE_VOIP_ANSWER = 4;
int PUSH_MESSAGE_TYPE_RECALLED = 5;
int PUSH_MESSAGE_TYPE_DELETED = 6;
}
private static PushServer INSTANCE = new PushServer();
@@ -97,7 +100,7 @@ public class PushServer {
url = iOSPushServerUrl;
pushMessage.voipDeviceToken = session.getVoipDeviceToken();
}
HttpUtils.httpJsonPost(url, new Gson().toJson(pushMessage, pushMessage.getClass()));
HttpUtils.httpJsonPost(url, new Gson().toJson(pushMessage, pushMessage.getClass()), POST_TYPE_Push);
} else {
LOG.info("Not mobile platform {}", session.getPlatform());
}
@@ -43,27 +43,17 @@ public class ServerSetting {
/** 根目录 */
private static File root;
/** Filter映射表 */
private static Map<String, Filter> filterMap;
private static Map<String, Filter> filterMap = new ConcurrentHashMap<>();
/** Action映射表 */
private static Map<String, Action> getActionMap;
private static Map<String, Action> postActionMap;
private static Map<String, Action> putActionMap;
private static Map<String, Action> deleteActionMap;
private static Map<String, Action> errorActionMap;
private static Map<String, Class<? extends Action>> getActionMap = new ConcurrentHashMap<>();
private static Map<String, Class<? extends Action>> postActionMap = new ConcurrentHashMap<>();
private static Map<String, Class<? extends Action>> putActionMap = new ConcurrentHashMap<>();
private static Map<String, Class<? extends Action>> deleteActionMap = new ConcurrentHashMap<>();
private static Map<String, Class<? extends Action>> errorActionMap = new ConcurrentHashMap<>();
static{
filterMap = new ConcurrentHashMap<String, Filter>();
getActionMap = new ConcurrentHashMap<String, Action>();
postActionMap = new ConcurrentHashMap<String, Action>();
putActionMap = new ConcurrentHashMap<String, Action>();
deleteActionMap = new ConcurrentHashMap<String, Action>();
errorActionMap = new ConcurrentHashMap<String, Action>();
errorActionMap.put(StrUtil.SLASH, new DefaultIndexAction());
errorActionMap.put(MAPPING_ERROR, new UnknownErrorAction());
errorActionMap.put(StrUtil.SLASH, DefaultIndexAction.class);
errorActionMap.put(MAPPING_ERROR, UnknownErrorAction.class);
}
/**
@@ -207,7 +197,7 @@ public class ServerSetting {
/**
* @return 获取ActionMap
*/
public static Map<String, Action> getActionMap(String method) {
public static Map<String, Class<? extends Action>> getActionMap(String method) {
if (method.equals("GET")) {
return getActionMap;
} else if(method.equals("POST")) {
@@ -221,7 +211,17 @@ public class ServerSetting {
}
public static Action getErrorAction(String path) {
return errorActionMap.get(path);
Class<? extends Action> cls = errorActionMap.get(path);
if(cls != null) {
try {
return cls.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return null;
}
/**
@@ -233,33 +233,17 @@ public class ServerSetting {
if(StrUtil.isBlank(path)){
path = StrUtil.SLASH;
}
return getActionMap(method).get(path.trim());
}
/**
* 设置Action类,已有的Action类将被覆盖
* @param path 拦截路径(必须以"/"开头)
* @param action Action类
*/
public static void setAction(String path, Action action) {
if(StrUtil.isBlank(path)){
path = StrUtil.SLASH;
}
if(null == action) {
Logger.warn("Added blank action, pass it.");
return;
}
//所有路径必须以 "/" 开头,如果没有则补全之
if(false == path.startsWith(StrUtil.SLASH)) {
path = StrUtil.SLASH + path;
}
String method = "GET";
HttpMethod methodAnnotation = action.getClass().getAnnotation(HttpMethod.class);
if (methodAnnotation != null) {
method = methodAnnotation.value();
Class<? extends Action> cls = getActionMap(method).get(path.trim());
if(cls != null) {
try {
return cls.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
ServerSetting.getActionMap(method).put(path, action);
return null;
}
/**
@@ -269,33 +253,41 @@ public class ServerSetting {
* @param actionClass Action类
*/
public static void setAction(String path, Class<? extends Action> actionClass) {
setAction(path, (Action)Singleton.get(actionClass));
if(StrUtil.isBlank(path)){
path = StrUtil.SLASH;
}
if(null == actionClass) {
Logger.warn("Added blank action, pass it.");
return;
}
//所有路径必须以 "/" 开头,如果没有则补全之
if(false == path.startsWith(StrUtil.SLASH)) {
path = StrUtil.SLASH + path;
}
String method = "GET";
HttpMethod methodAnnotation = actionClass.getAnnotation(HttpMethod.class);
if (methodAnnotation != null) {
method = methodAnnotation.value();
}
ServerSetting.getActionMap(method).put(path, actionClass);
}
/**
* 增加Action类,已有的Action类将被覆盖<br>
* 自动读取Route的注解来获得Path路径
* @param action 带注解的Action对象
*/
public static void setAction(Action action) {
final Route route = action.getClass().getAnnotation(Route.class);
if(route != null){
final String path = route.value();
if(StrUtil.isNotBlank(path)){
setAction(path, action);
return;
}
}
throw new ServerSettingException("Can not find Route annotation,please add annotation to Action class!");
}
/**
* 增加Action类,已有的Action类将被覆盖<br>
* 所有Action都是以单例模式存在的!
* @param actionClass 带注解的Action类
*/
public static void setAction(Class<? extends Action> actionClass) {
setAction((Action)Singleton.get(actionClass));
final Route route = actionClass.getAnnotation(Route.class);
if(route != null){
final String path = route.value();
if(StrUtil.isNotBlank(path)){
setAction(path, actionClass);
return;
}
}
throw new ServerSettingException("Can not find Route annotation,please add annotation to Action class!");
}
//----------------------------------------------------------------------------------------------- Action start
@@ -13,6 +13,7 @@ import com.xiaoleilu.loServer.RestResult;
import com.xiaoleilu.loServer.annotation.RequireAuthentication;
import com.xiaoleilu.loServer.handler.Request;
import com.xiaoleilu.loServer.handler.Response;
import io.moquette.server.config.IConfig;
import io.moquette.spi.IMessagesStore;
import io.moquette.spi.ISessionsStore;
import io.moquette.spi.impl.Utils;
@@ -21,10 +22,12 @@ import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import cn.wildfirechat.common.ErrorCode;
import win.liyufan.im.RateLimiter;
import java.nio.charset.StandardCharsets;
import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS;
import static io.moquette.BrokerConstants.*;
/**
* 请求处理接口<br>
@@ -38,7 +41,35 @@ abstract public class Action {
public static ISessionsStore sessionsStore = null;
public ChannelHandlerContext ctx;
public Response response;
protected static RateLimiter adminLimiter = null;
protected static RateLimiter robotLimiter = null;
protected static RateLimiter channelLimiter = null;
public static void init(IConfig config) {
int adminRate = 10000;
int robotRate = 1000;
int channelRate = 1000;
try {
adminRate = Integer.parseInt(config.getProperty(HTTP_ADMIN_RATE_LIMIT, "10000"));
} catch (NumberFormatException e) {
}
try {
robotRate = Integer.parseInt(config.getProperty(HTTP_ROBOT_RATE_LIMIT, "1000"));
} catch (NumberFormatException e) {
}
try {
channelRate = Integer.parseInt(config.getProperty(HTTP_CHANNEL_RATE_LIMIT, "1000"));
} catch (NumberFormatException e) {
}
adminLimiter = new RateLimiter(10, adminRate);
robotLimiter = new RateLimiter(10, robotRate);
channelLimiter = new RateLimiter(10, channelRate);
}
protected class Result {
Object data;
@@ -73,7 +104,7 @@ abstract public class Action {
return ERROR_CODE_SUCCESS;
}
public boolean doAction(Request request) {
public boolean doAction(Request request, Response response) {
ErrorCode errorCode = preAction(request, response);
boolean isSync = true;
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
@@ -89,7 +120,7 @@ abstract public class Action {
// throw e;
// }
// } else {
isSync = action(request);
isSync = action(request, response);
// }
} else {
response.setStatus(HttpResponseStatus.OK);
@@ -107,7 +138,7 @@ abstract public class Action {
public boolean isTransactionAction() {
return false;
}
abstract public boolean action(Request request);
abstract public boolean action(Request request, Response response);
protected <T> T getRequestBody(HttpRequest request, Class<T> cls) {
if (request instanceof FullHttpRequest) {
@@ -121,7 +152,7 @@ abstract public class Action {
return null;
}
protected void setResponseContent(RestResult result) {
protected void setResponseContent(RestResult result, Response response) {
response.setStatus(HttpResponseStatus.OK);
response.setContent(new Gson().toJson(result));
}
@@ -29,7 +29,7 @@ import java.io.IOException;
public class CheckTokenAction extends Action {
private final RateLimiter mLimitCounter = new RateLimiter(10, 1);
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
response.setStatus(HttpResponseStatus.OK);
String userId = request.getParam("userId");
@@ -12,7 +12,7 @@ import io.moquette.spi.IMessagesStore;
*/
public class DefaultIndexAction extends Action{
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
response.setContent("Welcome to LoServer.");
return true;
}
@@ -34,7 +34,7 @@ public class FileAction extends Action {
private static final org.slf4j.Logger Logger = LoggerFactory.getLogger(FileAction.class);
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
response.setHeader("Access-Control-Allow-Origin", "*");
if (false == Request.METHOD_GET.equalsIgnoreCase(request.getMethod())) {
response.sendError(HttpResponseStatus.METHOD_NOT_ALLOWED, "Please use GET method to request file!");
@@ -46,21 +46,28 @@ public class FileAction extends Action {
return true;
}
final File file = getFileByPath(request.getPath());
Logger.debug("Client [{}] get file [{}]", request.getIp(), file.getPath());
File file = null;
try {
file = getFileByPath(request.getPath());
} catch (Exception e) {
response.sendError(HttpResponseStatus.NOT_FOUND, "404 File not found!");
return true;
}
// 隐藏文件,跳过
if (file.isHidden() || !file.exists()) {
// 隐藏文件或不存在,跳过
if (file == null || file.isHidden() || !file.exists()) {
response.sendError(HttpResponseStatus.NOT_FOUND, "404 File not found!");
return true;
}
// 非文件,跳过
if (false == file.isFile()) {
if (!file.isFile()) {
response.sendError(HttpResponseStatus.FORBIDDEN, "403 Forbidden!");
return true;
}
Logger.debug("Client [{}] get file [{}]", request.getIp(), file.getPath());
// Cache Validation
String ifModifiedSince = request.getHeader(HttpHeaderNames.IF_MODIFIED_SINCE.toString());
if (StrUtil.isNotBlank(ifModifiedSince)) {
@@ -9,6 +9,7 @@
package com.xiaoleilu.loServer.action;
import cn.wildfirechat.proto.ProtoConstants;
import cn.wildfirechat.proto.WFCMessage;
import com.google.protobuf.InvalidProtocolBufferException;
import com.xiaoleilu.loServer.annotation.HttpMethod;
@@ -34,7 +35,7 @@ import java.util.concurrent.Executor;
public class IMAction extends Action {
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
FullHttpRequest fullHttpRequest = (FullHttpRequest)request.getNettyRequest();
@@ -101,7 +102,7 @@ public class IMAction extends Action {
ctx.executor().execute(command);
};
}
}, false);
}, ProtoConstants.RequestSourceType.Request_From_User);
return false;
}
} catch (InvalidProtocolBufferException e) {
@@ -27,7 +27,7 @@ public class NotFoundAction extends Action{
private final static String TEMPLATE_ERROR = "<!DOCTYPE html><html><head><title>LoServer - Error report</title><style>h1,h3 {color:white; background-color: gray;}</style></head><body><h1>HTTP Status {} - {}</h1><hr size=\"1\" noshade=\"noshade\" /><p>{}</p><hr size=\"1\" noshade=\"noshade\" /><h3>LoServer</h3></body></html>";
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
response.sendError(HttpResponseStatus.NOT_FOUND, "404 Not found!");
return true;
}
@@ -8,6 +8,7 @@
package com.xiaoleilu.loServer.action;
import cn.wildfirechat.proto.ProtoConstants;
import cn.wildfirechat.proto.WFCMessage;
import com.google.protobuf.InvalidProtocolBufferException;
import com.xiaoleilu.loServer.annotation.HttpMethod;
@@ -36,7 +37,7 @@ public class RouteAction extends Action {
private static final Logger LOG = LoggerFactory.getLogger(RouteAction.class);
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
response.setContentType("application/octet-stream");
@@ -134,7 +135,7 @@ public class RouteAction extends Action {
ctx.executor().execute(command);
};
}
}, false);
}, ProtoConstants.RequestSourceType.Request_From_User);
return false;
}
} catch (InvalidProtocolBufferException e) {
@@ -27,7 +27,7 @@ public class UnknownErrorAction extends Action{
private final static String TEMPLATE_ERROR = "<!DOCTYPE html><html><head><title>LoServer - Error report</title><style>h1,h3 {color:white; background-color: gray;}</style></head><body><h1>HTTP Status {} - {}</h1><hr size=\"1\" noshade=\"noshade\" /><p>{}</p><hr size=\"1\" noshade=\"noshade\" /><h3>LoServer</h3></body></html>";
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
response.setStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR);
return true;
}
@@ -73,7 +73,7 @@ public class UploadFileAction extends Action {
}
@Override
public boolean action(Request r) {
public boolean action(Request r, Response response) {
if (r.getNettyRequest() instanceof FullHttpRequest) {
FullHttpRequest request = (FullHttpRequest) r.getNettyRequest();
@@ -131,7 +131,8 @@ public class UploadFileAction extends Action {
}
readHttpDataChunkByChunk(response, decoder, requestId, HttpHeaders.isKeepAlive(request));
decoder.destroy();
if (chunk instanceof LastHttpContent) {
}
@@ -28,7 +28,7 @@ public class VersionAction extends Action {
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
response.setStatus(HttpResponseStatus.OK);
@@ -16,6 +16,7 @@ import com.hazelcast.util.StringUtil;
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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -31,7 +32,7 @@ public class AddFriendRequestAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputAddFriendRequest input = getRequestBody(request.getNettyRequest(), InputAddFriendRequest.class);
@@ -41,7 +42,7 @@ public class AddFriendRequestAction extends AdminAction {
}
WFCMessage.AddFriendRequest addFriendRequest = WFCMessage.AddFriendRequest.newBuilder().setReason(input.getReason()).setTargetUid(input.getFriendUid()).build();
sendApiMessage(input.getUserId(), IMTopic.AddFriendRequestTopic, addFriendRequest.toByteArray(), result -> {
sendApiMessage(response, input.getUserId(), IMTopic.AddFriendRequestTopic, addFriendRequest.toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -16,6 +16,7 @@ import com.xiaoleilu.loServer.annotation.HttpMethod;
import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import cn.wildfirechat.pojos.InputAddGroupMember;
import com.xiaoleilu.loServer.handler.Response;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -33,11 +34,11 @@ public class AddGroupMemberAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputAddGroupMember inputAddGroupMember = getRequestBody(request.getNettyRequest(), InputAddGroupMember.class);
if (inputAddGroupMember.isValide()) {
sendApiMessage(inputAddGroupMember.getOperator(), IMTopic.AddGroupMemberTopic, inputAddGroupMember.toProtoGroupRequest().toByteArray(), result -> {
sendApiMessage(response, inputAddGroupMember.getOperator(), IMTopic.AddGroupMemberTopic, inputAddGroupMember.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -45,7 +46,7 @@ public class AddGroupMemberAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -8,6 +8,8 @@
package com.xiaoleilu.loServer.action.admin;
import cn.wildfirechat.common.APIPath;
import cn.wildfirechat.proto.ProtoConstants;
import com.google.gson.Gson;
import com.xiaoleilu.loServer.RestResult;
import com.xiaoleilu.loServer.action.Action;
@@ -28,7 +30,6 @@ abstract public class AdminAction extends Action {
private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(AdminAction.class);
private static String SECRET_KEY = "123456";
private static boolean NO_CHECK_TIME = false;
private final RateLimiter mLimitCounter = new RateLimiter(10, 500);
public static void setSecretKey(String secretKey) {
SECRET_KEY = secretKey;
}
@@ -43,10 +44,14 @@ abstract public class AdminAction extends Action {
@Override
public ErrorCode preAction(Request request, Response response) {
if (!mLimitCounter.isGranted("admin")) {
if (!adminLimiter.isGranted("admin")) {
return ErrorCode.ERROR_CODE_OVER_FREQUENCY;
}
if(APIPath.Health.equals(request.getUri())) {
return ErrorCode.ERROR_CODE_SUCCESS;
}
String nonce = request.getHeader("nonce");
if (StringUtil.isNullOrEmpty(nonce)) {
nonce = request.getHeader("Nonce");
@@ -83,24 +88,26 @@ abstract public class AdminAction extends Action {
}
protected void sendResponse(Response response, ErrorCode errorCode, Object data) {
response.setStatus(HttpResponseStatus.OK);
if (errorCode == null) {
errorCode = ErrorCode.ERROR_CODE_SUCCESS;
if(response != null) {
response.setStatus(HttpResponseStatus.OK);
if (errorCode == null) {
errorCode = ErrorCode.ERROR_CODE_SUCCESS;
}
RestResult result = RestResult.resultOf(errorCode, errorCode.getMsg(), data);
response.setContent(new Gson().toJson(result));
response.send();
}
RestResult result = RestResult.resultOf(errorCode, errorCode.getMsg(), data);
response.setContent(new Gson().toJson(result));
response.send();
}
protected void sendApiMessage(String fromUser, String topic, byte[] message, ApiCallback callback) {
sendApiMessage(fromUser, null, topic, message, callback, false);
protected void sendApiMessage(Response response, String fromUser, String topic, byte[] message, ApiCallback callback) {
sendApiMessage(response, fromUser, null, topic, message, callback, false);
}
protected void sendApiMessage(String fromUser, String topic, byte[] message, ApiCallback callback, boolean noAdmin) {
sendApiMessage(fromUser, null, topic, message, callback, noAdmin);
protected void sendApiMessage(Response response, String fromUser, String topic, byte[] message, ApiCallback callback, boolean noAdmin) {
sendApiMessage(response, fromUser, null, topic, message, callback, noAdmin);
}
protected void sendApiMessage(String fromUser, String clientId, String topic, byte[] message, ApiCallback callback, boolean noAdmin) {
protected void sendApiMessage(Response response, String fromUser, String clientId, String topic, byte[] message, ApiCallback callback, boolean noAdmin) {
ServerAPIHelper.sendRequest(fromUser, clientId, topic, message, new ServerAPIHelper.Callback() {
@Override
public void onSuccess(byte[] result) {
@@ -126,6 +133,6 @@ abstract public class AdminAction extends Action {
ctx.executor().execute(command);
};
}
}, !noAdmin);
}, noAdmin ? ProtoConstants.RequestSourceType.Request_From_User : ProtoConstants.RequestSourceType.Request_From_Admin);
}
}
@@ -37,7 +37,7 @@ public class AliasGetAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputGetAlias input = getRequestBody(request.getNettyRequest(), InputGetAlias.class);
List<FriendData> dataList = messagesStore.getFriendList(input.getOperator(), null, 0);
@@ -51,7 +51,7 @@ public class AliasGetAction extends AdminAction {
}
}
setResponseContent(RestResult.ok(out));
setResponseContent(RestResult.ok(out), response);
}
return true;
}
@@ -12,16 +12,22 @@ import cn.wildfirechat.common.APIPath;
import cn.wildfirechat.common.ErrorCode;
import cn.wildfirechat.pojos.InputGetFriendList;
import cn.wildfirechat.pojos.InputUpdateAlias;
import cn.wildfirechat.pojos.OutputCreateChannel;
import cn.wildfirechat.pojos.OutputStringList;
import cn.wildfirechat.proto.WFCMessage;
import com.google.gson.Gson;
import com.hazelcast.util.StringUtil;
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 com.xiaoleilu.loServer.model.FriendData;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import win.liyufan.im.IMTopic;
import java.util.ArrayList;
import java.util.List;
@@ -36,11 +42,29 @@ public class AliasPutAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputUpdateAlias input = getRequestBody(request.getNettyRequest(), InputUpdateAlias.class);
ErrorCode errorCode = messagesStore.setFriendAliasRequest(input.getOperator(), input.getTargetId(), input.getAlias(), new long[1]);
setResponseContent(RestResult.resultOf(errorCode));
if(!StringUtil.isNullOrEmpty(input.getOperator()) && !StringUtil.isNullOrEmpty(input.getTargetId())) {
WFCMessage.AddFriendRequest addFriendRequest = WFCMessage.AddFriendRequest.newBuilder().setTargetUid(input.getTargetId()).setReason(input.getAlias()==null?"":input.getAlias()).build();
sendApiMessage(response, input.getOperator(), IMTopic.SetFriendAliasTopic, addFriendRequest.toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
byte[] data = new byte[byteBuf.readableBytes()];
byteBuf.readBytes(data);
String channelId = new String(data);
return new Result(ErrorCode.ERROR_CODE_SUCCESS, new OutputCreateChannel(channelId));
} else {
return new Result(errorCode);
}
});
return false;
} else {
ErrorCode errorCode = messagesStore.setFriendAliasRequest(input.getOperator(), input.getTargetId(), input.getAlias(), new long[1]);
setResponseContent(RestResult.resultOf(errorCode), response);
}
}
return true;
}
@@ -17,6 +17,7 @@ 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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -34,7 +35,7 @@ public class BlacklistAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputBlacklistRequest inputData = getRequestBody(request.getNettyRequest(), InputBlacklistRequest.class);
if (inputData != null
@@ -42,7 +43,7 @@ public class BlacklistAction extends AdminAction {
&& !StringUtil.isNullOrEmpty(inputData.getTargetUid())
) {
WFCMessage.BlackUserRequest friendRequest = WFCMessage.BlackUserRequest.newBuilder().setUid(inputData.getTargetUid()).setStatus(inputData.getStatus()).build();
sendApiMessage(inputData.getUserId(), IMTopic.BlackListUserTopic, friendRequest.toByteArray(), result -> {
sendApiMessage(response, inputData.getUserId(), IMTopic.BlackListUserTopic, friendRequest.toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -50,7 +51,7 @@ public class BlacklistAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -35,7 +35,7 @@ public class BlacklistGetAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputUserId inputGetFriendList = getRequestBody(request.getNettyRequest(), InputUserId.class);
List<FriendData> dataList = messagesStore.getFriendList(inputGetFriendList.getUserId(), null, 0);
@@ -45,7 +45,7 @@ public class BlacklistGetAction extends AdminAction {
list.add(data.getFriendUid());
}
}
setResponseContent(RestResult.ok(new OutputStringList(list)));
setResponseContent(RestResult.ok(new OutputStringList(list)), response);
}
return true;
}
@@ -15,6 +15,7 @@ import com.xiaoleilu.loServer.annotation.HttpMethod;
import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import cn.wildfirechat.pojos.InputOutputUserBlockStatus;
import com.xiaoleilu.loServer.handler.Response;
import io.moquette.persistence.ServerAPIHelper;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
@@ -31,7 +32,7 @@ public class BlockUserAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputOutputUserBlockStatus inputUserBlock = getRequestBody(request.getNettyRequest(), InputOutputUserBlockStatus.class);
if (inputUserBlock != null
@@ -44,12 +45,12 @@ public class BlockUserAction extends AdminAction {
response.setContent(new Gson().toJson(result));
if (inputUserBlock.getStatus() == 2) {
sendApiMessage(null, ServerAPIHelper.KICKOFF_USER_REQUEST, inputUserBlock.getUserId().getBytes(), null);
sendApiMessage(null, null, ServerAPIHelper.KICKOFF_USER_REQUEST, inputUserBlock.getUserId().getBytes(), null);
}
sendResponse(response, ErrorCode.ERROR_CODE_SUCCESS, null);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -19,6 +19,7 @@ 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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -35,11 +36,11 @@ public class BroadcastMessageAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
BroadMessageData sendMessageData = getRequestBody(request.getNettyRequest(), BroadMessageData.class);
if (BroadMessageData.isValide(sendMessageData) && !StringUtil.isNullOrEmpty(sendMessageData.getSender())) {
sendApiMessage(sendMessageData.getSender(), IMTopic.BroadcastMessageTopic, sendMessageData.toProtoMessage().toByteArray(), result -> {
sendApiMessage(response, sendMessageData.getSender(), IMTopic.BroadcastMessageTopic, sendMessageData.toProtoMessage().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -53,7 +54,7 @@ public class BroadcastMessageAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -15,6 +15,7 @@ import com.xiaoleilu.loServer.annotation.HttpMethod;
import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import cn.wildfirechat.pojos.InputGetUserInfo;
import com.xiaoleilu.loServer.handler.Response;
import io.moquette.persistence.ServerAPIHelper;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.util.internal.StringUtil;
@@ -30,11 +31,11 @@ public class CheckUserOnlineAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputGetUserInfo inputUserId = getRequestBody(request.getNettyRequest(), InputGetUserInfo.class);
if (inputUserId == null || !StringUtil.isNullOrEmpty(inputUserId.getUserId())) {
sendApiMessage(inputUserId.getUserId(), ServerAPIHelper.CHECK_USER_ONLINE_REQUEST, inputUserId.getUserId().getBytes(), res -> {
sendApiMessage(response, inputUserId.getUserId(), ServerAPIHelper.CHECK_USER_ONLINE_REQUEST, inputUserId.getUserId().getBytes(), res -> {
OutputCheckUserOnline out = new Gson().fromJson(new String(res), OutputCheckUserOnline.class);
return new Result(ErrorCode.ERROR_CODE_SUCCESS, out);
});
@@ -16,6 +16,7 @@ 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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -33,7 +34,7 @@ public class CreateChannelAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputCreateChannel inputCreateChannel = getRequestBody(request.getNettyRequest(), InputCreateChannel.class);
if (inputCreateChannel != null
@@ -45,7 +46,7 @@ public class CreateChannelAction extends AdminAction {
inputCreateChannel.setTargetId(messagesStore.getShortUUID());
}
sendApiMessage(inputCreateChannel.getOwner(), IMTopic.CreateChannelTopic, inputCreateChannel.toProtoChannelInfo().toByteArray(), result -> {
sendApiMessage(response, inputCreateChannel.getOwner(), IMTopic.CreateChannelTopic, inputCreateChannel.toProtoChannelInfo().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -60,7 +61,7 @@ public class CreateChannelAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -34,7 +34,7 @@ public class CreateChatroomAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
FullHttpRequest fullHttpRequest = (FullHttpRequest)request.getNettyRequest();
byte[] bytes = Utils.readBytesAndRewind(fullHttpRequest.content());
@@ -54,9 +54,9 @@ public class CreateChatroomAction extends AdminAction {
WFCMessage.ChatroomInfo info = inputCreateChatroom.toChatroomInfo();
messagesStore.createChatroom(inputCreateChatroom.getChatroomId(), info);
setResponseContent(RestResult.ok(new OutputCreateChatroom(inputCreateChatroom.getChatroomId())));
setResponseContent(RestResult.ok(new OutputCreateChatroom(inputCreateChatroom.getChatroomId())), response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -17,6 +17,7 @@ import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import cn.wildfirechat.pojos.InputCreateGroup;
import cn.wildfirechat.pojos.OutputCreateGroupResult;
import com.xiaoleilu.loServer.handler.Response;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -34,11 +35,11 @@ public class CreateGroupAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputCreateGroup inputCreateGroup = getRequestBody(request.getNettyRequest(), InputCreateGroup.class);
if (inputCreateGroup.isValide()) {
sendApiMessage(inputCreateGroup.getOperator(), IMTopic.CreateGroupTopic, inputCreateGroup.toProtoGroupRequest().toByteArray(), result -> {
sendApiMessage(response, inputCreateGroup.getOperator(), IMTopic.CreateGroupTopic, inputCreateGroup.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -53,7 +54,7 @@ public class CreateGroupAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -39,7 +39,7 @@ public class CreateRobotAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputCreateRobot inputCreateRobot = getRequestBody(request.getNettyRequest(), InputCreateRobot.class);
if (inputCreateRobot != null
@@ -79,9 +79,9 @@ public class CreateRobotAction extends AdminAction {
inputCreateRobot.setSecret(UUIDGenerator.getUUID());
}
messagesStore.addRobot(inputCreateRobot.toRobot());
setResponseContent(RestResult.ok(new OutputCreateRobot(inputCreateRobot.getUserId(), inputCreateRobot.getSecret())));
setResponseContent(RestResult.ok(new OutputCreateRobot(inputCreateRobot.getUserId(), inputCreateRobot.getSecret())), response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -40,7 +40,7 @@ public class CreateUserAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputOutputUserInfo inputCreateUser = getRequestBody(request.getNettyRequest(), InputOutputUserInfo.class);
if (inputCreateUser != null
@@ -89,13 +89,13 @@ public class CreateUserAction extends AdminAction {
} catch (Exception e) {
e.printStackTrace();
Utility.printExecption(LOG, e, IMExceptionEvent.EventType.ADMIN_API_Exception);
setResponseContent(RestResult.resultOf(ErrorCode.ERROR_CODE_SERVER_ERROR, e.getMessage()));
setResponseContent(RestResult.resultOf(ErrorCode.ERROR_CODE_SERVER_ERROR, e.getMessage()), response);
return true;
}
setResponseContent(RestResult.ok(new OutputCreateUser(inputCreateUser.getUserId(), inputCreateUser.getName())));
setResponseContent(RestResult.ok(new OutputCreateUser(inputCreateUser.getUserId(), inputCreateUser.getName())), response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -32,7 +32,7 @@ public class DestoryChatroomAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
FullHttpRequest fullHttpRequest = (FullHttpRequest)request.getNettyRequest();
byte[] bytes = Utils.readBytesAndRewind(fullHttpRequest.content());
@@ -42,9 +42,9 @@ public class DestoryChatroomAction extends AdminAction {
if (inputDestoryChatroom != null
&& !StringUtil.isNullOrEmpty(inputDestoryChatroom.getChatroomId())) {
messagesStore.destoryChatroom(inputDestoryChatroom.getChatroomId());
setResponseContent(RestResult.ok());
setResponseContent(RestResult.ok(), response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -0,0 +1,62 @@
/*
* This file is part of the Wildfire Chat package.
* (c) Heavyrain2012 <[email protected]>
*
* 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.InputChannelId;
import cn.wildfirechat.pojos.OutputCreateChannel;
import cn.wildfirechat.proto.WFCMessage;
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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.util.internal.StringUtil;
import win.liyufan.im.IMTopic;
@Route(APIPath.Destroy_Channel)
@HttpMethod("POST")
public class DestroyChannelAction extends AdminAction {
@Override
public boolean isTransactionAction() {
return true;
}
@Override
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputChannelId inputCreateChannel = getRequestBody(request.getNettyRequest(), InputChannelId.class);
if (inputCreateChannel != null
&& !StringUtil.isNullOrEmpty(inputCreateChannel.channelId)) {
WFCMessage.ChannelInfo channelInfo = messagesStore.getChannelInfo(inputCreateChannel.channelId);
if(channelInfo == null) {
setResponseContent(RestResult.resultOf(ErrorCode.ERROR_CODE_NOT_EXIST), response);
return true;
}
WFCMessage.IDBuf.Builder builder = WFCMessage.IDBuf.newBuilder().setId(inputCreateChannel.channelId);
sendApiMessage(response, channelInfo.getOwner(), IMTopic.DestroyChannelInfoTopic, builder.build().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
return new Result(errorCode);
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
}
}
@@ -17,6 +17,7 @@ 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;
@@ -34,20 +35,20 @@ public class DestroyUserAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputDestroyUser inputDestroyUser = getRequestBody(request.getNettyRequest(), InputDestroyUser.class);
if (inputDestroyUser != null
&& !StringUtil.isNullOrEmpty(inputDestroyUser.getUserId())) {
WFCMessage.IDBuf idBuf = WFCMessage.IDBuf.newBuilder().setId(inputDestroyUser.getUserId()).build();
sendApiMessage(inputDestroyUser.getUserId(), IMTopic.DestroyUserTopic, idBuf.toByteArray(), result -> {
sendApiMessage(response, inputDestroyUser.getUserId(), IMTopic.DestroyUserTopic, idBuf.toByteArray(), result -> {
ErrorCode errorCode1 = ErrorCode.fromCode(result[0]);
return new Result(errorCode1);
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -16,6 +16,7 @@ import com.xiaoleilu.loServer.annotation.HttpMethod;
import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import cn.wildfirechat.pojos.InputDismissGroup;
import com.xiaoleilu.loServer.handler.Response;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -33,11 +34,11 @@ public class DismissGroupAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputDismissGroup inputDismissGroup = getRequestBody(request.getNettyRequest(), InputDismissGroup.class);
if (inputDismissGroup.isValide()) {
sendApiMessage(inputDismissGroup.getOperator(), IMTopic.DismissGroupTopic, inputDismissGroup.toProtoGroupRequest().toByteArray(), result -> {
sendApiMessage(response, inputDismissGroup.getOperator(), IMTopic.DismissGroupTopic, inputDismissGroup.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -45,7 +46,7 @@ public class DismissGroupAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -0,0 +1,39 @@
/*
* This file is part of the Wildfire Chat package.
* (c) Heavyrain2012 <[email protected]>
*
* 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.InputUpdateFriendExtra;
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;
@Route(APIPath.Friend_Set_Extra)
@HttpMethod("POST")
public class FriendExtraPutAction extends AdminAction {
@Override
public boolean isTransactionAction() {
return true;
}
@Override
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputUpdateFriendExtra input = getRequestBody(request.getNettyRequest(), InputUpdateFriendExtra.class);
ErrorCode errorCode = messagesStore.setFriendExtraRequest(input.getOperator(), input.getTargetId(), input.getExtra(), new long[1]);
setResponseContent(RestResult.resultOf(errorCode), response);
}
return true;
}
}
@@ -16,6 +16,7 @@ import com.xiaoleilu.loServer.annotation.HttpMethod;
import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import cn.wildfirechat.pojos.InputUpdateFriendStatusRequest;
import com.xiaoleilu.loServer.handler.Response;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -34,7 +35,7 @@ public class FriendRelationAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputUpdateFriendStatusRequest friendAdd = getRequestBody(request.getNettyRequest(), InputUpdateFriendStatusRequest.class);
if (friendAdd != null
@@ -45,7 +46,7 @@ public class FriendRelationAction extends AdminAction {
if (!StringUtil.isNullOrEmpty(friendAdd.getExtra())) {
friendRequestBuilder = friendRequestBuilder.setExtra(friendAdd.getExtra());
}
sendApiMessage(friendAdd.getUserId(), IMTopic.HandleFriendRequestTopic, friendRequestBuilder.build().toByteArray(), result -> {
sendApiMessage(response, friendAdd.getUserId(), IMTopic.HandleFriendRequestTopic, friendRequestBuilder.build().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -53,7 +54,7 @@ public class FriendRelationAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -36,7 +36,7 @@ public class FriendRelationGetAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputUserId inputGetFriendList = getRequestBody(request.getNettyRequest(), InputUserId.class);
List<FriendData> dataList = messagesStore.getFriendList(inputGetFriendList.getUserId(), null, 0);
@@ -47,7 +47,7 @@ public class FriendRelationGetAction extends AdminAction {
list.add(data.getFriendUid());
}
}
setResponseContent(RestResult.ok(new OutputStringList(list)));
setResponseContent(RestResult.ok(new OutputStringList(list)), response);
}
return true;
}
@@ -0,0 +1,51 @@
/*
* This file is part of the Wildfire Chat package.
* (c) Heavyrain2012 <[email protected]>
*
* 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.InputChannelId;
import cn.wildfirechat.pojos.OutputGetChannelInfo;
import cn.wildfirechat.proto.WFCMessage;
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.util.internal.StringUtil;
@Route(APIPath.Get_Channel_Info)
@HttpMethod("POST")
public class GetChannelAction extends AdminAction {
@Override
public boolean isTransactionAction() {
return true;
}
@Override
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputChannelId inputCreateChannel = getRequestBody(request.getNettyRequest(), InputChannelId.class);
if (inputCreateChannel != null
&& !StringUtil.isNullOrEmpty(inputCreateChannel.channelId)) {
WFCMessage.ChannelInfo channelInfo = messagesStore.getChannelInfo(inputCreateChannel.channelId);
if (channelInfo == null) {
setResponseContent(RestResult.resultOf(ErrorCode.ERROR_CODE_NOT_EXIST), response);
} else {
setResponseContent(RestResult.ok(OutputGetChannelInfo.fromPbInfo(channelInfo)), response);
}
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
}
}
@@ -32,7 +32,7 @@ public class GetChatroomInfoAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputGetChatroomInfo getChatroomInfo = getRequestBody(request.getNettyRequest(), InputGetChatroomInfo.class);
String chatroomid = getChatroomInfo.getChatroomId();
@@ -46,9 +46,9 @@ public class GetChatroomInfoAction extends AdminAction {
} else {
result = RestResult.resultOf(ErrorCode.ERROR_CODE_NOT_EXIST);
}
setResponseContent(result);
setResponseContent(result, response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -39,7 +39,7 @@ public class GetChatroomMembersAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputGetChatroomInfo getChatroomInfo = getRequestBody(request.getNettyRequest(), InputGetChatroomInfo.class);
String chatroomid = getChatroomInfo.getChatroomId();
@@ -58,9 +58,9 @@ public class GetChatroomMembersAction extends AdminAction {
} else {
result = RestResult.resultOf(ErrorCode.ERROR_CODE_NOT_EXIST);
}
setResponseContent(result);
setResponseContent(result, response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -35,7 +35,7 @@ public class GetGroupInfoAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputGetGroup inputGetGroup = getRequestBody(request.getNettyRequest(), InputGetGroup.class);
if (inputGetGroup != null
@@ -53,11 +53,15 @@ public class GetGroupInfoAction extends AdminAction {
pojoGroupInfo.setPortrait(groupInfo.getPortrait());
pojoGroupInfo.setTarget_id(groupInfo.getTargetId());
pojoGroupInfo.setType(groupInfo.getType());
pojoGroupInfo.setMute(groupInfo.getMute());
pojoGroupInfo.setJoin_type(groupInfo.getJoinType());
pojoGroupInfo.setPrivate_chat(groupInfo.getPrivateChat());
pojoGroupInfo.setSearchable(groupInfo.getSearchable());
result = RestResult.ok(pojoGroupInfo);
}
setResponseContent(result);
setResponseContent(result, response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -39,7 +39,7 @@ public class GetGroupMembersAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputGetGroup inputGetGroup = getRequestBody(request.getNettyRequest(), InputGetGroup.class);
if (inputGetGroup != null
@@ -63,14 +63,15 @@ public class GetGroupMembersAction extends AdminAction {
pm.setAlias(member.getAlias());
pm.setType(member.getType());
pm.setExtra(member.getExtra());
pm.setCreateDt(member.getCreateDt());
out.getMembers().add(pm);
}
result = RestResult.ok(out);
}
setResponseContent(result);
setResponseContent(result, response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -15,8 +15,11 @@ import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import cn.wildfirechat.pojos.InputGetToken;
import cn.wildfirechat.pojos.OutputGetIMTokenData;
import com.xiaoleilu.loServer.handler.Response;
import io.netty.handler.codec.http.FullHttpRequest;
import cn.wildfirechat.common.ErrorCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import win.liyufan.im.IMTopic;
import java.util.Base64;
@@ -24,21 +27,21 @@ import java.util.Base64;
@Route(APIPath.User_Get_Token)
@HttpMethod("POST")
public class GetIMTokenAction extends AdminAction {
private static final Logger LOG = LoggerFactory.getLogger(GetIMTokenAction.class);
@Override
public boolean isTransactionAction() {
return false;
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputGetToken input = getRequestBody(request.getNettyRequest(), InputGetToken.class);
String userId = input.getUserId();
WFCMessage.GetTokenRequest getTokenRequest = WFCMessage.GetTokenRequest.newBuilder().setUserId(userId).setClientId(input.getClientId()).setPlatform(input.getPlatform() == null ? 0 : input.getPlatform()).build();
sendApiMessage(userId, input.getClientId(), IMTopic.GetTokenTopic, getTokenRequest.toByteArray(), result -> {
sendApiMessage(response, userId, input.getClientId(), IMTopic.GetTokenTopic, getTokenRequest.toByteArray(), result -> {
ErrorCode errorCode1 = ErrorCode.fromCode(result[0]);
if (errorCode1 == ErrorCode.ERROR_CODE_SUCCESS) {
//ba errorcode qudiao
@@ -48,6 +51,8 @@ public class GetIMTokenAction extends AdminAction {
}
String token = Base64.getEncoder().encodeToString(data);
LOG.info("get im token success {},{},{}", userId, input.getClientId(), token.substring(0, Math.min(10, token.length())));
return new Result(errorCode1, new OutputGetIMTokenData(userId, token));
} else {
return new Result(errorCode1);
@@ -0,0 +1,56 @@
/*
* This file is part of the Wildfire Chat package.
* (c) Heavyrain2012 <[email protected]>
*
* 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.InputMessageUid;
import cn.wildfirechat.pojos.OutputMessageData;
import cn.wildfirechat.pojos.RecallMessageData;
import cn.wildfirechat.proto.WFCMessage;
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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.util.internal.StringUtil;
import win.liyufan.im.IMTopic;
@Route(APIPath.Msg_GetOne)
@HttpMethod("POST")
public class GetMessageAction extends AdminAction {
@Override
public boolean isTransactionAction() {
return true;
}
@Override
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputMessageUid inputMessageUid = getRequestBody(request.getNettyRequest(), InputMessageUid.class);
if (inputMessageUid != null && inputMessageUid.messageUid > 0) {
RestResult result;
WFCMessage.Message msg = messagesStore.getMessage(inputMessageUid.messageUid);
if(msg == null) {
result = RestResult.resultOf(ErrorCode.ERROR_CODE_NOT_EXIST);
} else {
result = RestResult.ok(OutputMessageData.fromProtoMessage(msg));
}
setResponseContent(result, response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
}
}
@@ -34,7 +34,7 @@ public class GetSystemSettingAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
SystemSettingPojo inputUserId = getRequestBody(request.getNettyRequest(), SystemSettingPojo.class);
if (inputUserId != null) {
@@ -47,9 +47,9 @@ public class GetSystemSettingAction extends AdminAction {
result = RestResult.ok(output);
}
setResponseContent(result);
setResponseContent(result, response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -33,7 +33,7 @@ public class GetUserAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputGetUserInfo inputUserId = getRequestBody(request.getNettyRequest(), InputGetUserInfo.class);
if (inputUserId != null
@@ -55,9 +55,9 @@ public class GetUserAction extends AdminAction {
result = RestResult.ok(InputOutputUserInfo.fromPbUser(user));
}
setResponseContent(result);
setResponseContent(result, response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -29,12 +29,12 @@ public class GetUserBlockListAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
OutputUserBlockStatusList list = new OutputUserBlockStatusList();
list.setStatusList(messagesStore.getUserStatusList());
RestResult result = RestResult.ok(list);
setResponseContent(result);
setResponseContent(result, response);
}
return true;
}
@@ -32,16 +32,16 @@ public class GetUserBlockStatusAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputGetUserInfo inputUserId = getRequestBody(request.getNettyRequest(), InputGetUserInfo.class);
if (inputUserId != null
&& !StringUtil.isNullOrEmpty(inputUserId.getUserId())) {
int status = messagesStore.getUserStatus(inputUserId.getUserId());
setResponseContent(RestResult.ok(new OutputUserStatus(status)));
setResponseContent(RestResult.ok(new OutputUserStatus(status)), response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -38,7 +38,7 @@ public class GetUserGroupsAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputUserId inputUserId = getRequestBody(request.getNettyRequest(), InputUserId.class);
if (inputUserId != null
@@ -48,9 +48,9 @@ public class GetUserGroupsAction extends AdminAction {
OutputGroupIds outputGroupIds = new OutputGroupIds();
outputGroupIds.setGroupIds(new ArrayList<>(groupIds));
RestResult result = RestResult.ok(outputGroupIds);
setResponseContent(result);
setResponseContent(result, response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -0,0 +1,73 @@
/*
* This file is part of the Wildfire Chat package.
* (c) Heavyrain2012 <[email protected]>
*
* 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.pojos.OutputUserBlockStatusList;
import com.xiaoleilu.loServer.RestResult;
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 org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.io.File;
import java.lang.management.OperatingSystemMXBean;
import static java.lang.management.ManagementFactory.getOperatingSystemMXBean;
@Route(APIPath.Health)
public class HealthAction extends AdminAction {
@Override
public boolean isTransactionAction() {
return true;
}
@Override
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("node", "1");
JSONObject cpuObject = new JSONObject();
jsonObject.put("cpu", cpuObject);
JSONObject memoryObject = new JSONObject();
jsonObject.put("memory", memoryObject);
JSONObject fileObject = new JSONObject();
jsonObject.put("disk", fileObject);
if (getOperatingSystemMXBean() instanceof OperatingSystemMXBean) {
double load = getOperatingSystemMXBean().getSystemLoadAverage();
cpuObject.put("load", load);
}
cpuObject.put("cores", Runtime.getRuntime().availableProcessors());
memoryObject.put("free", Runtime.getRuntime().freeMemory());
memoryObject.put("max", Runtime.getRuntime().maxMemory());
memoryObject.put("avail", Runtime.getRuntime().totalMemory());
File root = new File("/");
fileObject.put("space", root.getTotalSpace());
fileObject.put("free", root.getFreeSpace());
fileObject.put("usable", root.getUsableSpace());
JSONArray out = new JSONArray();
out.add(jsonObject);
RestResult result = RestResult.ok(out);
setResponseContent(result, response);
}
return true;
}
}
@@ -16,6 +16,7 @@ import com.xiaoleilu.loServer.annotation.HttpMethod;
import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import cn.wildfirechat.pojos.InputKickoffGroupMember;
import com.xiaoleilu.loServer.handler.Response;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -33,11 +34,11 @@ public class KickoffGroupMemberAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputKickoffGroupMember inputKickoffGroupMember = getRequestBody(request.getNettyRequest(), InputKickoffGroupMember.class);
if (inputKickoffGroupMember.isValide()) {
sendApiMessage(inputKickoffGroupMember.getOperator(), IMTopic.KickoffGroupMemberTopic, inputKickoffGroupMember.toProtoGroupRequest().toByteArray(), result -> {
sendApiMessage(response, inputKickoffGroupMember.getOperator(), IMTopic.KickoffGroupMemberTopic, inputKickoffGroupMember.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -45,7 +46,7 @@ public class KickoffGroupMemberAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -31,14 +31,14 @@ public class KickoffUserClientAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
StringPairPojo pojo = getRequestBody(request.getNettyRequest(), StringPairPojo.class);
if (pojo != null && !StringUtil.isNullOrEmpty(pojo.getFirst())) {
sessionsStore.kickoffUserClient(pojo.getFirst(), pojo.getSecond());
sendResponse(response, ErrorCode.ERROR_CODE_SUCCESS, null);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -17,6 +17,7 @@ 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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -33,11 +34,11 @@ public class ModifyGroupInfoAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputModifyGroupInfo inputAddGroupMember = getRequestBody(request.getNettyRequest(), InputModifyGroupInfo.class);
if (inputAddGroupMember.isValide()) {
sendApiMessage(inputAddGroupMember.getOperator(), IMTopic.ModifyGroupInfoTopic, inputAddGroupMember.toProtoGroupRequest().toByteArray(), result -> {
sendApiMessage(response, inputAddGroupMember.getOperator(), IMTopic.ModifyGroupInfoTopic, inputAddGroupMember.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -45,7 +46,7 @@ public class ModifyGroupInfoAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -17,6 +17,7 @@ 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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -33,11 +34,11 @@ public class ModifyGroupMemberAliasAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputSetGroupMemberAlias inputSetGroupMemberAlias = getRequestBody(request.getNettyRequest(), InputSetGroupMemberAlias.class);
if (inputSetGroupMemberAlias.isValide()) {
sendApiMessage(inputSetGroupMemberAlias.getOperator(), IMTopic.ModifyGroupMemberAliasTopic, inputSetGroupMemberAlias.toProtoGroupRequest().toByteArray(), result -> {
sendApiMessage(response, inputSetGroupMemberAlias.getOperator(), IMTopic.ModifyGroupMemberAliasTopic, inputSetGroupMemberAlias.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -45,7 +46,7 @@ public class ModifyGroupMemberAliasAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -0,0 +1,58 @@
/*
* This file is part of the Wildfire Chat package.
* (c) Heavyrain2012 <[email protected]>
*
* 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.InputSetGroupMemberExtra;
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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import win.liyufan.im.IMTopic;
import java.util.concurrent.Executor;
@Route(APIPath.Group_Set_Member_Extra)
@HttpMethod("POST")
public class ModifyGroupMemberExtraAction extends AdminAction {
@Override
public boolean isTransactionAction() {
return true;
}
@Override
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputSetGroupMemberExtra inputSetGroupMemberExtra = getRequestBody(request.getNettyRequest(), InputSetGroupMemberExtra.class);
if (inputSetGroupMemberExtra.isValide()) {
sendApiMessage(response, inputSetGroupMemberExtra.getOperator(), IMTopic.ModifyGroupMemberExtraTopic, inputSetGroupMemberExtra.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
return new Result(errorCode);
});
return false;
} else {
response.setStatus(HttpResponseStatus.OK);
RestResult result = RestResult.resultOf(ErrorCode.INVALID_PARAMETER);
response.setContent(new Gson().toJson(result));
}
}
return true;
}
}
@@ -18,6 +18,7 @@ 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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -34,11 +35,11 @@ public class MulticastMessageAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
MulticastMessageData sendMessageData = getRequestBody(request.getNettyRequest(), MulticastMessageData.class);
if (MulticastMessageData.isValide(sendMessageData)) {
sendApiMessage(sendMessageData.getSender(), IMTopic.MultiCastMessageTopic, sendMessageData.toProtoMessage().toByteArray(), result -> {
sendApiMessage(response, sendMessageData.getSender(), IMTopic.MultiCastMessageTopic, sendMessageData.toProtoMessage().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -52,7 +53,7 @@ public class MulticastMessageAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -34,7 +34,7 @@ public class PutSystemSettingAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
SystemSettingPojo inputUserId = getRequestBody(request.getNettyRequest(), SystemSettingPojo.class);
if (inputUserId != null
@@ -47,9 +47,9 @@ public class PutSystemSettingAction extends AdminAction {
} else {
result = RestResult.ok();
}
setResponseContent(result);
setResponseContent(result, response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -17,6 +17,7 @@ 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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -33,11 +34,11 @@ public class QuitGroupMemberAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputQuitGroup inputQuitGroup = getRequestBody(request.getNettyRequest(), InputQuitGroup.class);
if (inputQuitGroup.isValide()) {
sendApiMessage(inputQuitGroup.getOperator(), IMTopic.QuitGroupTopic, inputQuitGroup.toProtoGroupRequest().toByteArray(), result -> {
sendApiMessage(response, inputQuitGroup.getOperator(), IMTopic.QuitGroupTopic, inputQuitGroup.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -45,7 +46,7 @@ public class QuitGroupMemberAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -16,6 +16,7 @@ import com.xiaoleilu.loServer.annotation.HttpMethod;
import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import cn.wildfirechat.pojos.RecallMessageData;
import com.xiaoleilu.loServer.handler.Response;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -34,13 +35,13 @@ public class RecallMessageAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
RecallMessageData recallMessageData = getRequestBody(request.getNettyRequest(), RecallMessageData.class);
if (recallMessageData != null && !StringUtil.isNullOrEmpty(recallMessageData.getOperator())) {
WFCMessage.INT64Buf idBuf = WFCMessage.INT64Buf.newBuilder().setId(recallMessageData.getMessageUid()).build();
sendApiMessage(recallMessageData.getOperator(), IMTopic.RecallMessageTopic, idBuf.toByteArray(), result -> {
sendApiMessage(response, recallMessageData.getOperator(), IMTopic.RecallMessageTopic, idBuf.toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -48,7 +49,7 @@ public class RecallMessageAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -17,6 +17,7 @@ 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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -34,13 +35,13 @@ public class RecallMultiCastMessageAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
RecallMultiCastMessageData recallMessageData = getRequestBody(request.getNettyRequest(), RecallMultiCastMessageData.class);
if (recallMessageData != null && !StringUtil.isNullOrEmpty(recallMessageData.operator)) {
WFCMessage.RecallMultiCastMessageRequest recallRequest = WFCMessage.RecallMultiCastMessageRequest.newBuilder().setMessageId(recallMessageData.messageUid).addAllReceiver(recallMessageData.receivers).build();
sendApiMessage(recallMessageData.operator, IMTopic.RecallMultiCastMessageTopic, recallRequest.toByteArray(), result -> {
sendApiMessage(response, recallMessageData.operator, IMTopic.RecallMultiCastMessageTopic, recallRequest.toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -48,7 +49,7 @@ public class RecallMultiCastMessageAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -37,7 +37,7 @@ public class RelationGetAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
StringPairPojo input = getRequestBody(request.getNettyRequest(), StringPairPojo.class);
FriendData data = messagesStore.getFriendData(input.getFirst(), input.getSecond());
@@ -51,7 +51,7 @@ public class RelationGetAction extends AdminAction {
out.alias = data.getAlias();
out.extra = data.getExtra();
}
setResponseContent(RestResult.ok(out));
setResponseContent(RestResult.ok(out), response);
}
return true;
}
@@ -18,6 +18,7 @@ import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import cn.wildfirechat.pojos.SendMessageData;
import cn.wildfirechat.pojos.SendMessageResult;
import com.xiaoleilu.loServer.handler.Response;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -35,11 +36,11 @@ public class SendMessageAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
SendMessageData sendMessageData = getRequestBody(request.getNettyRequest(), SendMessageData.class);
if (SendMessageData.isValide(sendMessageData) && !StringUtil.isNullOrEmpty(sendMessageData.getSender())) {
sendApiMessage(sendMessageData.getSender(), IMTopic.SendMessageTopic, sendMessageData.toProtoMessage().toByteArray(), result -> {
sendApiMessage(response, sendMessageData.getSender(), IMTopic.SendMessageTopic, sendMessageData.toProtoMessage().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -53,7 +54,7 @@ public class SendMessageAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -30,7 +30,7 @@ public class SensitiveWordAddAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputOutputSensitiveWords input = getRequestBody(request.getNettyRequest(), InputOutputSensitiveWords.class);
if (input != null && input.getWords() != null && !input.getWords().isEmpty()) {
@@ -38,7 +38,7 @@ public class SensitiveWordAddAction extends AdminAction {
response.setStatus(HttpResponseStatus.OK);
sendResponse(response, errorCode, null);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -30,7 +30,7 @@ public class SensitiveWordDeleteAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputOutputSensitiveWords input = getRequestBody(request.getNettyRequest(), InputOutputSensitiveWords.class);
if (input != null && input.getWords() != null && !input.getWords().isEmpty()) {
@@ -39,7 +39,7 @@ public class SensitiveWordDeleteAction extends AdminAction {
sendResponse(response, errorCode, null);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -29,7 +29,7 @@ public class SensitiveWordQueryAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
List<String> words = messagesStore.getAllSensitiveWords();
InputOutputSensitiveWords out = new InputOutputSensitiveWords();
@@ -17,6 +17,7 @@ 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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -33,11 +34,11 @@ public class SetGroupManagerAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputSetGroupManager inputAddGroupMember = getRequestBody(request.getNettyRequest(), InputSetGroupManager.class);
if (inputAddGroupMember.isValide()) {
sendApiMessage(inputAddGroupMember.getOperator(), IMTopic.SetGroupManagerTopic, inputAddGroupMember.toProtoGroupRequest().toByteArray(), result -> {
sendApiMessage(response, inputAddGroupMember.getOperator(), IMTopic.SetGroupManagerTopic, inputAddGroupMember.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -45,7 +46,7 @@ public class SetGroupManagerAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -16,6 +16,7 @@ import com.xiaoleilu.loServer.annotation.HttpMethod;
import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import cn.wildfirechat.pojos.InputTransferGroup;
import com.xiaoleilu.loServer.handler.Response;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -33,11 +34,11 @@ public class TransferGroupAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputTransferGroup inputDismissGroup = getRequestBody(request.getNettyRequest(), InputTransferGroup.class);
if (inputDismissGroup.isValide()) {
sendApiMessage(inputDismissGroup.getOperator(), IMTopic.TransferGroupTopic, inputDismissGroup.toProtoGroupRequest().toByteArray(), result -> {
sendApiMessage(response, inputDismissGroup.getOperator(), IMTopic.TransferGroupTopic, inputDismissGroup.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -45,7 +46,7 @@ public class TransferGroupAction extends AdminAction {
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -41,7 +41,7 @@ public class UpdateUserAction extends AdminAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputUpdateUserInfo inputCreateUser = getRequestBody(request.getNettyRequest(), InputUpdateUserInfo.class);
if (inputCreateUser != null
@@ -50,9 +50,9 @@ public class UpdateUserAction extends AdminAction {
&& inputCreateUser.flag > 0) {
ErrorCode errorCode = messagesStore.updateUserInfo(inputCreateUser.userInfo, inputCreateUser.flag);
setResponseContent(RestResult.resultOf(errorCode));
setResponseContent(RestResult.resultOf(errorCode), response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -9,6 +9,7 @@
package com.xiaoleilu.loServer.action.channel;
import cn.wildfirechat.common.IMExceptionEvent;
import cn.wildfirechat.proto.ProtoConstants;
import cn.wildfirechat.proto.WFCMessage;
import com.google.gson.Gson;
import com.xiaoleilu.loServer.RestResult;
@@ -27,11 +28,11 @@ import org.slf4j.LoggerFactory;
import win.liyufan.im.RateLimiter;
import win.liyufan.im.Utility;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.Executor;
abstract public class ChannelAction extends Action {
private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(ChannelAction.class);
private final RateLimiter mLimitCounter = new RateLimiter(10, 200);
protected WFCMessage.ChannelInfo channelInfo;
protected interface Callback {
@@ -61,7 +62,7 @@ abstract public class ChannelAction extends Action {
return ErrorCode.ERROR_CODE_API_NOT_SIGNED;
}
if (!mLimitCounter.isGranted(cid)) {
if (!channelLimiter.isGranted(cid)) {
return ErrorCode.ERROR_CODE_OVER_FREQUENCY;
}
@@ -69,6 +70,7 @@ abstract public class ChannelAction extends Action {
try {
ts = Long.parseLong(timestamp);
} catch (Exception e) {
LOG.error("Channel timestamp:{} invalid", timestamp);
e.printStackTrace();
Utility.printExecption(LOG, e, IMExceptionEvent.EventType.CHANNEL_API_Exception);
return ErrorCode.ERROR_CODE_API_NOT_SIGNED;
@@ -80,11 +82,11 @@ abstract public class ChannelAction extends Action {
channelInfo = messagesStore.getChannelInfo(cid);
if (channelInfo == null) {
return ErrorCode.INVALID_PARAMETER;
return ErrorCode.ERROR_CODE_CHANNEL_NO_EXIST;
}
if (StringUtil.isNullOrEmpty(channelInfo.getSecret())) {
return ErrorCode.ERROR_CODE_NOT_RIGHT;
return ErrorCode.ERROR_CODE_CHANNEL_NO_SECRET;
}
String str = nonce + "|" + channelInfo.getSecret() + "|" + timestamp;
@@ -92,7 +94,7 @@ abstract public class ChannelAction extends Action {
return localSign.equals(sign) ? ErrorCode.ERROR_CODE_SUCCESS : ErrorCode.ERROR_CODE_AUTH_FAILURE;
}
protected void sendResponse(ErrorCode errorCode, Object data) {
protected void sendResponse(Response response, ErrorCode errorCode, Object data) {
response.setStatus(HttpResponseStatus.OK);
if (errorCode == null) {
errorCode = ErrorCode.ERROR_CODE_SUCCESS;
@@ -107,7 +109,7 @@ abstract public class ChannelAction extends Action {
if (request instanceof FullHttpRequest) {
FullHttpRequest fullHttpRequest = (FullHttpRequest) request;
byte[] bytes = Utils.readBytesAndRewind(fullHttpRequest.content());
String content = new String(bytes);
String content = new String(bytes, StandardCharsets.UTF_8);
Gson gson = new Gson();
T t = gson.fromJson(content, cls);
return t;
@@ -115,10 +117,10 @@ abstract public class ChannelAction extends Action {
return null;
}
protected void sendApiMessage(String topic, byte[] message, Callback callback) {
sendApiMessage(channelInfo.getOwner(), topic, message, callback);
protected void sendApiMessage(Response response, String topic, byte[] message, Callback callback) {
sendApiMessage(response, channelInfo.getOwner(), topic, message, callback);
}
protected void sendApiMessage(String user, String topic, byte[] message, Callback callback) {
protected void sendApiMessage(Response response, String user, String topic, byte[] message, Callback callback) {
ServerAPIHelper.sendRequest(user, null, topic, message, new ServerAPIHelper.Callback() {
@Override
public void onSuccess(byte[] response) {
@@ -126,12 +128,12 @@ abstract public class ChannelAction extends Action {
}
@Override
public void onError(ErrorCode errorCode) {
sendResponse(errorCode, null);
sendResponse(response, errorCode, null);
}
@Override
public void onTimeout() {
sendResponse(ErrorCode.ERROR_CODE_TIMEOUT, null);
sendResponse(response, ErrorCode.ERROR_CODE_TIMEOUT, null);
}
@Override
@@ -140,6 +142,6 @@ abstract public class ChannelAction extends Action {
ctx.executor().execute(command);
};
}
}, false, true);
}, ProtoConstants.RequestSourceType.Request_From_Channel);
}
}
@@ -29,9 +29,9 @@ import io.netty.util.internal.StringUtil;
public class GetChannelAction extends ChannelAction {
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
setResponseContent(RestResult.ok(OutputGetChannelInfo.fromPbInfo(channelInfo)));
setResponseContent(RestResult.ok(OutputGetChannelInfo.fromPbInfo(channelInfo)), response);
}
return true;
}
@@ -31,12 +31,12 @@ import java.util.ArrayList;
public class GetChannelSubscribersAction extends ChannelAction {
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
OutputStringList outputStringList = new OutputStringList();
outputStringList.setList(new ArrayList<>());
outputStringList.getList().addAll(messagesStore.getChannelSubscriber(channelInfo.getTargetId()));
setResponseContent(RestResult.ok(outputStringList));
setResponseContent(RestResult.ok(outputStringList), response);
}
return true;
}
@@ -14,16 +14,12 @@ import cn.wildfirechat.pojos.InputGetUserInfo;
import cn.wildfirechat.pojos.InputOutputUserInfo;
import cn.wildfirechat.proto.ProtoConstants;
import cn.wildfirechat.proto.WFCMessage;
import com.google.gson.Gson;
import com.xiaoleilu.loServer.RestResult;
import com.xiaoleilu.loServer.action.admin.AdminAction;
import com.xiaoleilu.loServer.action.robot.RobotAction;
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.Channel_User_Info)
@@ -31,7 +27,7 @@ import io.netty.util.internal.StringUtil;
public class GetUserAction extends ChannelAction {
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputGetUserInfo inputUserId = getRequestBody(request.getNettyRequest(), InputGetUserInfo.class);
if (inputUserId != null
@@ -69,9 +65,9 @@ public class GetUserAction extends ChannelAction {
}
}
setResponseContent(result);
setResponseContent(result, response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -28,24 +28,24 @@ import win.liyufan.im.IMTopic;
@HttpMethod("POST")
public class ModifyChannelProfileAction extends ChannelAction {
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputModifyChannelInfo input = getRequestBody(request.getNettyRequest(), InputModifyChannelInfo.class);
if (input != null) {
WFCMessage.ModifyChannelInfo modifyChannelInfo = WFCMessage.ModifyChannelInfo.newBuilder().setChannelId(channelInfo.getTargetId()).setType(input.getType()).setValue(input.getValue()).build();
sendApiMessage(IMTopic.ModifyChannelInfoTopic, modifyChannelInfo.toByteArray(), result -> {
sendApiMessage(response, IMTopic.ModifyChannelInfoTopic, modifyChannelInfo.toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
sendResponse(null, null);
sendResponse(response, null, null);
} else {
sendResponse(errorCode, null);
sendResponse(response, errorCode, null);
}
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -12,7 +12,6 @@ package com.xiaoleilu.loServer.action.channel;
import cn.wildfirechat.common.APIPath;
import cn.wildfirechat.pojos.SendChannelMessageData;
import cn.wildfirechat.proto.ProtoConstants;
import com.google.gson.Gson;
import com.xiaoleilu.loServer.RestResult;
import com.xiaoleilu.loServer.annotation.HttpMethod;
import com.xiaoleilu.loServer.annotation.Route;
@@ -24,7 +23,6 @@ import cn.wildfirechat.pojos.SendMessageResult;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import cn.wildfirechat.common.ErrorCode;
import win.liyufan.im.IMTopic;
@@ -40,14 +38,14 @@ public class SendMessageAction extends ChannelAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
SendChannelMessageData sendChannelMessageData = getRequestBody(request.getNettyRequest(), SendChannelMessageData.class);
if(sendChannelMessageData.getTargets() != null && !sendChannelMessageData.getTargets().isEmpty()) {
if((channelInfo.getStatus() & ProtoConstants.ChannelState.Channel_State_Mask_Message_Unsubscribed) == 0 && (channelInfo.getStatus() & ProtoConstants.ChannelState.Channel_State_Mask_Global) == 0) {
for (String target:sendChannelMessageData.getTargets()) {
if(!messagesStore.checkUserInChannel(target, channelInfo.getTargetId())) {
setResponseContent(RestResult.resultOf(ErrorCode.ERROR_CODE_NOT_RIGHT, "User " + target + " not in channel"));
setResponseContent(RestResult.resultOf(ErrorCode.ERROR_CODE_NOT_RIGHT, "User " + target + " not in channel"), response);
return true;
}
}
@@ -63,21 +61,21 @@ public class SendMessageAction extends ChannelAction {
sendMessageData.setPayload(sendChannelMessageData.getPayload());
sendMessageData.setToUsers(sendChannelMessageData.getTargets());
if (SendMessageData.isValide(sendMessageData)) {
sendApiMessage(IMTopic.SendMessageTopic, sendMessageData.toProtoMessage().toByteArray(), result -> {
sendApiMessage(response, IMTopic.SendMessageTopic, sendMessageData.toProtoMessage().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
long messageId = byteBuf.readLong();
long timestamp = byteBuf.readLong();
sendResponse(null, new SendMessageResult(messageId, timestamp));
sendResponse(response, null, new SendMessageResult(messageId, timestamp));
} else {
sendResponse(errorCode, null);
sendResponse(response, errorCode, null);
}
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -19,6 +19,7 @@ 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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
@@ -30,7 +31,7 @@ import win.liyufan.im.IMTopic;
public class SubscriberChannelAction extends ChannelAction {
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputChannelSubscribe input = getRequestBody(request.getNettyRequest(), InputChannelSubscribe.class);
if (input != null && !StringUtil.isNullOrEmpty(input.getTarget())) {
@@ -41,19 +42,19 @@ public class SubscriberChannelAction extends ChannelAction {
return true;
}
WFCMessage.ListenChannel listenChannel = WFCMessage.ListenChannel.newBuilder().setChannelId(channelInfo.getTargetId()).setListen(input.getSubscribe()).build();
sendApiMessage(input.getTarget(), IMTopic.ChannelListenTopic, listenChannel.toByteArray(), result -> {
sendApiMessage(response, input.getTarget(), IMTopic.ChannelListenTopic, listenChannel.toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
sendResponse(null, null);
sendResponse(response, null, null);
} else {
sendResponse(errorCode, null);
sendResponse(response, errorCode, null);
}
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -34,24 +34,24 @@ public class AddGroupMemberAction extends RobotAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputAddGroupMember inputAddGroupMember = getRequestBody(request.getNettyRequest(), InputAddGroupMember.class);
inputAddGroupMember.setOperator(robot.getUid());
if (inputAddGroupMember.isValide()) {
sendApiRequest(IMTopic.AddGroupMemberTopic, inputAddGroupMember.toProtoGroupRequest().toByteArray(), result -> {
sendApiRequest(response, IMTopic.AddGroupMemberTopic, inputAddGroupMember.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
sendResponse(null, null);
sendResponse(response, null, null);
} else {
sendResponse(errorCode, null);
sendResponse(response, errorCode, null);
}
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -37,7 +37,7 @@ public class CreateGroupAction extends RobotAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputCreateGroup inputCreateGroup = getRequestBody(request.getNettyRequest(), InputCreateGroup.class);
inputCreateGroup.setOperator(robot.getUid());
@@ -45,7 +45,7 @@ public class CreateGroupAction extends RobotAction {
if (inputCreateGroup.isValide()) {
PojoGroupInfo group_info = inputCreateGroup.getGroup().getGroup_info();
WFCMessage.CreateGroupRequest createGroupRequest = inputCreateGroup.toProtoGroupRequest();
sendApiRequest(IMTopic.CreateGroupTopic, createGroupRequest.toByteArray(), result -> {
sendApiRequest(response, IMTopic.CreateGroupTopic, createGroupRequest.toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
@@ -53,14 +53,14 @@ public class CreateGroupAction extends RobotAction {
byte[] data = new byte[byteBuf.readableBytes()];
byteBuf.readBytes(data);
String groupId = new String(data);
sendResponse(null, new OutputCreateGroupResult(groupId));
sendResponse(response, null, new OutputCreateGroupResult(groupId));
} else {
sendResponse(errorCode, null);
sendResponse(response, errorCode, null);
}
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -26,13 +26,13 @@ import io.netty.util.internal.StringUtil;
public class DeleteCallbackAction extends RobotAction {
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
if(!StringUtil.isNullOrEmpty(robot.getCallback())) {
robot = robot.toBuilder().clearCallback().setState(0).build();
messagesStore.addRobot(robot);
}
setResponseContent(RestResult.ok());
setResponseContent(RestResult.ok(), response);
}
return true;
}
@@ -34,24 +34,24 @@ public class DismissGroupAction extends RobotAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputDismissGroup inputDismissGroup = getRequestBody(request.getNettyRequest(), InputDismissGroup.class);
inputDismissGroup.setOperator(robot.getUid());
if (inputDismissGroup.isValide()) {
sendApiRequest(IMTopic.DismissGroupTopic, inputDismissGroup.toProtoGroupRequest().toByteArray(), result -> {
sendApiRequest(response, IMTopic.DismissGroupTopic, inputDismissGroup.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
sendResponse(null, null);
sendResponse(response, null, null);
} else {
sendResponse(errorCode, null);
sendResponse(response, errorCode, null);
}
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -29,11 +29,11 @@ import io.netty.util.internal.StringUtil;
public class GetCallbackAction extends RobotAction {
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
RobotCallbackPojo out = new RobotCallbackPojo();
out.setUrl(robot.getCallback());
setResponseContent(RestResult.ok(out));
setResponseContent(RestResult.ok(out), response);
}
return true;
}
@@ -34,7 +34,7 @@ public class GetGroupInfoAction extends RobotAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputGetGroup inputGetGroup = getRequestBody(request.getNettyRequest(), InputGetGroup.class);
if (inputGetGroup != null
@@ -52,11 +52,15 @@ public class GetGroupInfoAction extends RobotAction {
pojoGroupInfo.setPortrait(groupInfo.getPortrait());
pojoGroupInfo.setTarget_id(groupInfo.getTargetId());
pojoGroupInfo.setType(groupInfo.getType());
pojoGroupInfo.setMute(groupInfo.getMute());
pojoGroupInfo.setJoin_type(groupInfo.getJoinType());
pojoGroupInfo.setPrivate_chat(groupInfo.getPrivateChat());
pojoGroupInfo.setSearchable(groupInfo.getSearchable());
result = RestResult.ok(pojoGroupInfo);
}
setResponseContent(result);
setResponseContent(result, response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -39,7 +39,7 @@ public class GetGroupMembersAction extends RobotAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputGetGroup inputGetGroup = getRequestBody(request.getNettyRequest(), InputGetGroup.class);
String robotId = robot.getUid();
@@ -67,6 +67,7 @@ public class GetGroupMembersAction extends RobotAction {
pm.setAlias(member.getAlias());
pm.setType(member.getType());
pm.setExtra(member.getExtra());
pm.setCreateDt(member.getCreateDt());
out.getMembers().add(pm);
}
if(!isInGroup) {
@@ -75,9 +76,9 @@ public class GetGroupMembersAction extends RobotAction {
result = RestResult.ok(out);
}
setResponseContent(result);
setResponseContent(result, response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -28,7 +28,7 @@ import cn.wildfirechat.common.ErrorCode;
public class GetUserAction extends RobotAction {
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputGetUserInfo inputUserId = getRequestBody(request.getNettyRequest(), InputGetUserInfo.class);
if (inputUserId != null
@@ -49,9 +49,9 @@ public class GetUserAction extends RobotAction {
} else {
result = RestResult.ok(InputOutputUserInfo.fromPbUser(user));
}
setResponseContent(result);
setResponseContent(result, response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -34,24 +34,24 @@ public class KickoffGroupMemberAction extends RobotAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputKickoffGroupMember inputKickoffGroupMember = getRequestBody(request.getNettyRequest(), InputKickoffGroupMember.class);
inputKickoffGroupMember.setOperator(robot.getUid());
if (inputKickoffGroupMember.isValide()) {
sendApiRequest(IMTopic.KickoffGroupMemberTopic, inputKickoffGroupMember.toProtoGroupRequest().toByteArray(), result -> {
sendApiRequest(response, IMTopic.KickoffGroupMemberTopic, inputKickoffGroupMember.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
sendResponse(null, null);
sendResponse(response, null, null);
} else {
sendResponse(errorCode, null);
sendResponse(response, errorCode, null);
}
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -34,24 +34,24 @@ public class ModifyGroupInfoAction extends RobotAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputModifyGroupInfo inputAddGroupMember = getRequestBody(request.getNettyRequest(), InputModifyGroupInfo.class);
inputAddGroupMember.setOperator(robot.getUid());
if (inputAddGroupMember.isValide()) {
sendApiRequest(IMTopic.ModifyGroupInfoTopic, inputAddGroupMember.toProtoGroupRequest().toByteArray(), result -> {
sendApiRequest(response, IMTopic.ModifyGroupInfoTopic, inputAddGroupMember.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
sendResponse(null, null);
sendResponse(response, null, null);
} else {
sendResponse(errorCode, null);
sendResponse(response, errorCode, null);
}
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -34,24 +34,24 @@ public class ModifyGroupMemberAliasAction extends RobotAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputSetGroupMemberAlias inputSetGroupMemberAlias = getRequestBody(request.getNettyRequest(), InputSetGroupMemberAlias.class);
inputSetGroupMemberAlias.setOperator(robot.getUid());
if (inputSetGroupMemberAlias.isValide()) {
sendApiRequest(IMTopic.ModifyGroupMemberAliasTopic, inputSetGroupMemberAlias.toProtoGroupRequest().toByteArray(), result -> {
sendApiRequest(response, IMTopic.ModifyGroupMemberAliasTopic, inputSetGroupMemberAlias.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
sendResponse(null, null);
sendResponse(response, null, null);
} else {
sendResponse(errorCode, null);
sendResponse(response, errorCode, null);
}
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -0,0 +1,61 @@
/*
* This file is part of the Wildfire Chat package.
* (c) Heavyrain2012 <heavyrain.lee@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
package com.xiaoleilu.loServer.action.robot;
import cn.wildfirechat.common.APIPath;
import cn.wildfirechat.common.ErrorCode;
import cn.wildfirechat.pojos.InputSetGroupMemberExtra;
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.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import win.liyufan.im.IMTopic;
@Route(APIPath.Robot_Group_Set_Member_Extra)
@HttpMethod("POST")
public class ModifyGroupMemberExtraAction extends RobotAction {
@Override
public boolean isTransactionAction() {
return true;
}
@Override
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputSetGroupMemberExtra inputSetGroupMemberExtra = getRequestBody(request.getNettyRequest(), InputSetGroupMemberExtra.class);
inputSetGroupMemberExtra.setOperator(robot.getUid());
if (inputSetGroupMemberExtra.isValide()) {
sendApiRequest(response, IMTopic.ModifyGroupMemberExtraTopic, inputSetGroupMemberExtra.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
sendResponse(response, null, null);
} else {
sendResponse(response, errorCode, null);
}
});
return false;
} else {
response.setStatus(HttpResponseStatus.OK);
RestResult result = RestResult.resultOf(ErrorCode.INVALID_PARAMETER);
response.setContent(new Gson().toJson(result));
}
}
return true;
}
}
@@ -34,24 +34,24 @@ public class QuitGroupMemberAction extends RobotAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputQuitGroup inputQuitGroup = getRequestBody(request.getNettyRequest(), InputQuitGroup.class);
inputQuitGroup.setOperator(robot.getUid());
if (inputQuitGroup.isValide()) {
sendApiRequest(IMTopic.QuitGroupTopic, inputQuitGroup.toProtoGroupRequest().toByteArray(), result -> {
sendApiRequest(response, IMTopic.QuitGroupTopic, inputQuitGroup.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
sendResponse(null, null);
sendResponse(response, null, null);
} else {
sendResponse(errorCode, null);
sendResponse(response, errorCode, null);
}
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -9,6 +9,7 @@
package com.xiaoleilu.loServer.action.robot;
import cn.wildfirechat.common.IMExceptionEvent;
import cn.wildfirechat.proto.ProtoConstants;
import cn.wildfirechat.proto.WFCMessage;
import com.google.gson.Gson;
import com.xiaoleilu.loServer.RestResult;
@@ -33,7 +34,6 @@ import java.util.concurrent.Executor;
abstract public class RobotAction extends Action {
protected static final Logger LOG = LoggerFactory.getLogger(RobotAction.class);
private final RateLimiter mLimitCounter = new RateLimiter(10, 1000);
protected WFCMessage.Robot robot;
@@ -64,7 +64,7 @@ abstract public class RobotAction extends Action {
return ErrorCode.ERROR_CODE_API_NOT_SIGNED;
}
if (!mLimitCounter.isGranted(rid)) {
if (!robotLimiter.isGranted(rid)) {
return ErrorCode.ERROR_CODE_OVER_FREQUENCY;
}
@@ -95,7 +95,7 @@ abstract public class RobotAction extends Action {
return localSign.equals(sign) ? ErrorCode.ERROR_CODE_SUCCESS : ErrorCode.ERROR_CODE_AUTH_FAILURE;
}
protected void sendResponse(ErrorCode errorCode, Object data) {
protected void sendResponse(Response response, ErrorCode errorCode, Object data) {
response.setStatus(HttpResponseStatus.OK);
if (errorCode == null) {
errorCode = ErrorCode.ERROR_CODE_SUCCESS;
@@ -124,7 +124,7 @@ abstract public class RobotAction extends Action {
return null;
}
protected void sendApiRequest(String topic, byte[] message, Callback callback) {
protected void sendApiRequest(Response response, String topic, byte[] message, Callback callback) {
ServerAPIHelper.sendRequest(robot.getUid(), null, topic, message, new ServerAPIHelper.Callback() {
@Override
public void onSuccess(byte[] response) {
@@ -133,12 +133,12 @@ abstract public class RobotAction extends Action {
@Override
public void onError(ErrorCode errorCode) {
sendResponse(errorCode, null);
sendResponse(response, errorCode, null);
}
@Override
public void onTimeout() {
sendResponse(ErrorCode.ERROR_CODE_TIMEOUT, null);
sendResponse(response, ErrorCode.ERROR_CODE_TIMEOUT, null);
}
@Override
@@ -147,6 +147,6 @@ abstract public class RobotAction extends Action {
ctx.executor().execute(command);
};
}
}, false, true);
}, ProtoConstants.RequestSourceType.Request_From_Robot);
}
}
@@ -35,26 +35,26 @@ public class SendMessageAction extends RobotAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
SendMessageData sendMessageData = getRequestBody(request.getNettyRequest(), SendMessageData.class);
sendMessageData.setSender(robot.getUid());
if (SendMessageData.isValide(sendMessageData)) {
sendApiRequest(IMTopic.SendMessageTopic, sendMessageData.toProtoMessage().toByteArray(), result -> {
sendApiRequest(response, IMTopic.SendMessageTopic, sendMessageData.toProtoMessage().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
long messageId = byteBuf.readLong();
long timestamp = byteBuf.readLong();
sendResponse(null, new SendMessageResult(messageId, timestamp));
sendResponse(response, null, new SendMessageResult(messageId, timestamp));
} else {
sendResponse(errorCode, null);
sendResponse(response, errorCode, null);
}
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
@@ -27,7 +27,7 @@ import io.netty.util.internal.StringUtil;
public class SetCallbackAction extends RobotAction {
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
RobotCallbackPojo input = getRequestBody(request.getNettyRequest(), RobotCallbackPojo.class);
if(!StringUtil.isNullOrEmpty(input.getUrl())) {
@@ -35,9 +35,9 @@ public class SetCallbackAction extends RobotAction {
robot = robot.toBuilder().setCallback(input.getUrl()).setState(1).build();
messagesStore.addRobot(robot);
}
setResponseContent(RestResult.ok());
setResponseContent(RestResult.ok(), response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
@@ -34,24 +34,24 @@ public class TransferGroupAction extends RobotAction {
}
@Override
public boolean action(Request request) {
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputTransferGroup inputDismissGroup = getRequestBody(request.getNettyRequest(), InputTransferGroup.class);
inputDismissGroup.setOperator(robot.getUid());
if (inputDismissGroup.isValide()) {
sendApiRequest(IMTopic.TransferGroupTopic, inputDismissGroup.toProtoGroupRequest().toByteArray(), result -> {
sendApiRequest(response, IMTopic.TransferGroupTopic, inputDismissGroup.toProtoGroupRequest().toByteArray(), result -> {
ByteBuf byteBuf = Unpooled.buffer();
byteBuf.writeBytes(result);
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
sendResponse(null, null);
sendResponse(response, null, null);
} else {
sendResponse(errorCode, null);
sendResponse(response, errorCode, null);
}
});
return false;
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER));
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;

Some files were not shown because too many files have changed in this diff Show More