Commit b4774b23 by hweeeeeei

ws下发会话属性变动事件;

ws下发会话拓展字段变动事件
parent 004d822b
# 四恩慈善 - 后端项目
# IM 后端项目
## 框架介绍
> 本项目使用第三方开源脚手架项目: spring-boot-plus 参考:README-zh.md
......
......@@ -98,7 +98,7 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkAppid, imApplication.getId())
.eq(ImConversationMembers::getFkConversationId, imConvMemeClientRemarkNameParam.getConversationId())
.eq(ImConversationMembers::getId, imClientSender.getId())
.eq(ImConversationMembers::getFkClientId, imClientSender.getId())
);
if (imConversationMember == null) {
......
......@@ -610,7 +610,49 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imConversationById.setName(imConversationNameUpdate.getName());
boolean b = imConversationService.updateById(imConversationById);
if (b) {
//TODO 下发群名称变动事件
// 下发群名称变动事件
// ws下发群属性变动事件
// 内容
HashMap<String, String> content = new HashMap<>();
content.put("type", "-1015");
content.put("name", imConversationById.getName());
// 遍历发送
for (ImConversationMembers conversationMembers : membersList) {
// 查询接收方
ImClient imClientReceiver = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, imApplication.getId())
.eq(ImClient::getId, conversationMembers.getFkClientId()));
if (imClientReceiver == null) {
continue;
}
// 封装响应的实体
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
// imMessageOnlineSend.setMsgId(null);
// imMessageOnlineSend.setSender(imClientSender.getClientId());
imMessageOnlineSend.setContent(content);
imMessageOnlineSend.setConversationId(conversationMembers.getFkConversationId());
// imMessageOnlineSend.setWithdraw(Boolean.FALSE);
imMessageOnlineSend.setEvent(Boolean.TRUE);
// 向接收方推送
WsResponseModel<ImMessageOnlineSend> responseModel = new WsResponseModel<>();
responseModel.setCmd(WsResponseCmdEnum.CONVERSATION_EVENT_MSG.getCmdCode());
ApiResult<Boolean> result = ApiResult.result(ApiCode.SUCCESS);
responseModel.setCode(result.getCode());
responseModel.setMsg(result.getMessage());
responseModel.setData(imMessageOnlineSend);
responseModel.setReqId(null);
writeDataService.write(responseModel, imApplication.getAppKey(), imClientReceiver.getClientId());
}
return ApiResult.ok();
} else {
......@@ -660,7 +702,47 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
if (b) {
//TODO ws下发群属性变动事件
// ws下发拓展字段变动事件
// 内容
HashMap<String, String> content = new HashMap<>();
content.put("type", "-1014");
content.put("attributes", imConversationById.getAttributes());
// 遍历发送
for (ImConversationMembers conversationMembers : membersList) {
// 查询接收方
ImClient imClientReceiver = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, imApplication.getId())
.eq(ImClient::getId, conversationMembers.getFkClientId()));
if (imClientReceiver == null) {
continue;
}
// 封装响应的实体
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
// imMessageOnlineSend.setMsgId(null);
// imMessageOnlineSend.setSender(imClientSender.getClientId());
imMessageOnlineSend.setContent(content);
imMessageOnlineSend.setConversationId(conversationMembers.getFkConversationId());
// imMessageOnlineSend.setWithdraw(Boolean.FALSE);
imMessageOnlineSend.setEvent(Boolean.TRUE);
// 向接收方推送
WsResponseModel<ImMessageOnlineSend> responseModel = new WsResponseModel<>();
responseModel.setCmd(WsResponseCmdEnum.CONVERSATION_EVENT_MSG.getCmdCode());
ApiResult<Boolean> result = ApiResult.result(ApiCode.SUCCESS);
responseModel.setCode(result.getCode());
responseModel.setMsg(result.getMessage());
responseModel.setData(imMessageOnlineSend);
responseModel.setReqId(null);
writeDataService.write(responseModel, imApplication.getAppKey(), imClientReceiver.getClientId());
}
return ApiResult.ok();
......
This source diff could not be displayed because it is too large. You can view the blob instead.
/*
Navicat Premium Data Transfer
Source Server : localhost
Source Server Type : MySQL
Source Server Version : 50730
Source Host : localhost:3306
Source Schema : wecloud_im
Target Server Type : MySQL
Target Server Version : 50730
File Encoding : 65001
Date: 03/12/2021 11:26:12
*/
SET NAMES utf8mb4;
SET
FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for im_application
-- ----------------------------
DROP TABLE IF EXISTS `im_application`;
CREATE TABLE `im_application`
(
`id` bigint(20) NOT NULL COMMENT '应用appid',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`app_key` varchar(200) CHARACTER SET latin1 DEFAULT NULL COMMENT 'key',
`app_secret` varchar(500) CHARACTER SET latin1 DEFAULT NULL COMMENT '密钥',
`app_name` varchar(200) DEFAULT NULL COMMENT 'app名称',
`ios_push_channel` int(255) DEFAULT NULL COMMENT 'ios推送通道,友盟:1;firebase:2; apns原生:3',
`android_push_channel` int(255) DEFAULT NULL COMMENT '安卓推送通道,友盟:1;firebase:2; 信鸽3',
`umeng_key` varchar(500) DEFAULT NULL COMMENT '友盟推送key',
`umeng_secret` varchar(500) DEFAULT NULL COMMENT '友盟推送密钥',
`firebase_secret` varchar(500) DEFAULT NULL COMMENT 'firebase推送密钥',
`repeat_session_status` int(1) DEFAULT '0' COMMENT '是否允许创建重复会话 0不允许 1允许',
`contrast_extended_field_status` int(1) DEFAULT '0' COMMENT '创建会话时对比扩展字段 0不 1是',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `app_key` (`app_key`) USING HASH
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='第三方应用表';
-- ----------------------------
-- Table structure for im_client
-- ----------------------------
DROP TABLE IF EXISTS `im_client`;
CREATE TABLE `im_client`
(
`id` bigint(20) NOT NULL COMMENT '客户端id',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`last_offline_time` timestamp NULL DEFAULT NULL COMMENT '最后离线时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`fk_appid` bigint(20) DEFAULT NULL COMMENT '应用appid',
`attributes` json DEFAULT NULL COMMENT '可选 自定义属性,供开发者扩展使用',
`client_id` varchar(200) DEFAULT NULL COMMENT '客户方提供的唯一id',
`valid` int(1) DEFAULT NULL COMMENT '设备不想收到推送提醒',
`device_type` int(1) DEFAULT NULL COMMENT '设备类型1:ios; 2:android',
`device_token` varchar(300) DEFAULT NULL COMMENT '设备推送token',
`head_portrait` varchar(1000) DEFAULT NULL COMMENT '头像',
`nickname` varchar(30) DEFAULT NULL COMMENT '主昵称',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY ```fk_appid``, ``client_id``` (`fk_appid`,`client_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='终端表';
-- ----------------------------
-- Table structure for im_client_blacklist
-- ----------------------------
DROP TABLE IF EXISTS `im_client_blacklist`;
CREATE TABLE `im_client_blacklist`
(
`id` bigint(20) NOT NULL COMMENT '客户端id',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`fk_appid` bigint(20) DEFAULT NULL COMMENT '应用appid',
`fk_client_id_prevent` bigint(20) DEFAULT NULL COMMENT '拉黑者',
`fk_client_id_be_prevent` bigint(20) DEFAULT NULL COMMENT '被拉黑',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='黑名单';
-- ----------------------------
-- Table structure for im_conversation
-- ----------------------------
DROP TABLE IF EXISTS `im_conversation`;
CREATE TABLE `im_conversation`
(
`id` bigint(20) NOT NULL COMMENT '会话id',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`last_message` timestamp NULL DEFAULT NULL COMMENT '对话中最后一条消息的发送或接收时间',
`fk_appid` bigint(20) NOT NULL COMMENT '应用appid',
`creator` bigint(20) NOT NULL COMMENT '创建者客户端id',
`name` varchar(255) DEFAULT NULL COMMENT '可选 对话的名字,可为群组命名。',
`attributes` json DEFAULT NULL COMMENT '可选 自定义属性,供开发者扩展使用。',
`system` tinyint(1) DEFAULT NULL COMMENT '可选 对话类型标志,是否是系统对话,后面会说明。',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会话表';
-- ----------------------------
-- Table structure for im_conversation_members
-- ----------------------------
DROP TABLE IF EXISTS `im_conversation_members`;
CREATE TABLE `im_conversation_members`
(
`id` bigint(20) NOT NULL COMMENT '唯一id',
`create_time` timestamp NULL DEFAULT NULL COMMENT '加入时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`fk_appid` bigint(20) NOT NULL COMMENT '应用appid',
`fk_conversation_id` bigint(20) NOT NULL COMMENT '会话表id',
`fk_client_id` bigint(20) NOT NULL COMMENT '客户端id',
`display_status` int(2) DEFAULT '1' COMMENT '单向删除(隐藏)会话, 0不显示, 1显示',
`allow_system_push_status` int(2) DEFAULT '1' COMMENT '是否允许系统推送, 0不推送, 1推送',
`attributes` json DEFAULT NULL COMMENT '可选 自定义属性,供开发者扩展使用',
`client_remark_name` varchar(255) DEFAULT NULL COMMENT '会话中client的备注名',
PRIMARY KEY (`id`) USING BTREE,
KEY `fk_conversation_id` (`fk_conversation_id`) USING HASH
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会话成员表';
-- ----------------------------
-- Table structure for im_inbox
-- ----------------------------
DROP TABLE IF EXISTS `im_inbox`;
CREATE TABLE `im_inbox`
(
`id` bigint(20) NOT NULL COMMENT '收件id',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`read_time` timestamp NULL DEFAULT NULL COMMENT '读取时间',
`receiver_time` timestamp NULL DEFAULT NULL COMMENT '接收时间',
`fk_appid` bigint(20) NOT NULL COMMENT '应用appid',
`receiver` bigint(20) NOT NULL COMMENT '接收客户端id',
`fk_msg_id` bigint(20) NOT NULL COMMENT '消息id',
`read_msg_status` int(1) DEFAULT NULL COMMENT '0未读; 1已读',
`receiver_msg_status` int(1) DEFAULT NULL COMMENT '0未接收; 1已接收',
`fk_conversation_id` bigint(20) NOT NULL COMMENT '会话id',
PRIMARY KEY (`id`) USING BTREE,
KEY `getMyOfflineMsg` (`receiver`) USING HASH
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息收件箱表';
-- ----------------------------
-- Table structure for im_ios_apns
-- ----------------------------
DROP TABLE IF EXISTS `im_ios_apns`;
CREATE TABLE `im_ios_apns`
(
`id` bigint(20) NOT NULL COMMENT 'id',
`fk_app_id` bigint(20) NOT NULL COMMENT '应用appid',
`apns_file_value` text CHARACTER SET latin1 COMMENT 'Base64(apns.p12)',
`env` int(255) DEFAULT NULL COMMENT '环境,正式1,测试0',
`bundle_id` varchar(500) DEFAULT NULL COMMENT 'bundle_id',
`pwd` varchar(500) DEFAULT NULL COMMENT '证书密码',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='apns配置表';
-- ----------------------------
-- Table structure for im_message
-- ----------------------------
DROP TABLE IF EXISTS `im_message`;
CREATE TABLE `im_message`
(
`id` bigint(20) NOT NULL COMMENT '消息id',
`fk_conversation_id` bigint(20) DEFAULT NULL COMMENT '会话id',
`fk_appid` bigint(20) NOT NULL COMMENT '应用appid',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`withdraw_time` timestamp NULL DEFAULT NULL COMMENT '撤回时间',
`update_date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`sender` bigint(20) DEFAULT NULL COMMENT '发送者客户端id',
`content` json DEFAULT NULL COMMENT '内容',
`withdraw` tinyint(1) DEFAULT '0' COMMENT '0未撤回; 1已撤回',
`event` tinyint(1) DEFAULT '0' COMMENT '0非事件; 1为事件',
`system` tinyint(1) DEFAULT '0' COMMENT '0非系统通知; 1为系统通知',
`at` text COMMENT 'at他人,传入客户端id数组',
`send_status` int(2) DEFAULT NULL COMMENT '发送状态\n1AVIMMessageStatusSending(发送中)\n2AVIMMessageStatusSent(发送成功)\n3AVIMMessageStatusFailed(失败)',
PRIMARY KEY (`id`) USING BTREE,
KEY ```fk_conversation_id``` (`fk_conversation_id`) USING HASH
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息存储表';
-- ----------------------------
-- Table structure for im_rtc_channel
-- ----------------------------
DROP TABLE IF EXISTS `im_rtc_channel`;
CREATE TABLE `im_rtc_channel`
(
`id` bigint(20) NOT NULL COMMENT '会话id',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`fk_appid` bigint(20) NOT NULL COMMENT '外键 应用appid',
`fk_conversation` bigint(20) DEFAULT NULL COMMENT '外键 会话id 可为空',
`name` varchar(255) DEFAULT NULL COMMENT '可选 对话的名字,可为群组命名。',
`attributes` json DEFAULT NULL COMMENT '可选 自定义属性,供开发者扩展使用。',
`channel_status` int(1) DEFAULT NULL COMMENT '频道状态, 1打开 , 0关闭',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Rtc频道表';
-- ----------------------------
-- Table structure for im_rtc_log
-- ----------------------------
DROP TABLE IF EXISTS `im_rtc_log`;
CREATE TABLE `im_rtc_log`
(
`id` bigint(20) NOT NULL COMMENT 'rtc记录id',
`fk_appid` bigint(20) NOT NULL COMMENT '应用appid',
`fk_channel_id` bigint(20) DEFAULT NULL COMMENT '频道id',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`fk_conversation` bigint(20) DEFAULT NULL COMMENT '外键 会话id 可为空',
`client_id` bigint(20) DEFAULT NULL COMMENT '事件主体客户端id',
`event_type` int(1) DEFAULT NULL COMMENT '事件类型 1成为房主, 2加入频道,3退出频道,4拒绝邀请 ,5上传sdp, 6上传candidate',
`remark` text COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='RTC日志记录表';
SET
FOREIGN_KEY_CHECKS = 1;
# wecloud-im 前端Websocket对接文档
# wecloud-im 前端Websocket对接文档
......@@ -473,6 +473,60 @@ websocket是异步的 有可能你很快速的发送了几条消息,服务器响
- 你被xx拉入新会话 -1011
- xx主动退出会话 -1012
- xx成为新群主 -1013
- 群拓展字段变动事件 -1014
- 会话名称字段变动事件 -1015
### 下发 会话名称字段变动事件
该event事件消息类型不需要回执,该消息不会存入离线消息列表
```json
{
"cmd":5,
"code":200,
"msg":"成功",
"data":{
"createTime":1629086007054,
"content":{
"type":-1015,
"name":"xxxxxxx"
},
"event":true,
"conversationId":1427109730563788800
},
"reqId":null
}
```
### 下发 会话拓展字段变动事件
该event事件消息类型不需要回执,该消息不会存入离线消息列表
```json
{
"cmd":5,
"code":200,
"msg":"成功",
"data":{
"createTime":1629086007054,
"content":{
"type":-1014,
"attributes":"xxxxxxx"
},
"event":true,
"conversationId":1427109730563788800
},
"reqId":null
}
```
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment