Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wecloud_im_server
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hewei
wecloud_im_server
Commits
4b292cab
Commit
4b292cab
authored
Dec 01, 2021
by
hweeeeeei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加接口:主动退出会话
parent
bc4eb4f3
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
235 additions
and
3 deletions
+235
-3
common/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
+151
-2
docs/md/内部/wecloud-im前端Websocket对接文档.md
+84
-1
No files found.
common/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
View file @
4b292cab
...
...
@@ -235,6 +235,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
notIn
(
ImConversationMembers:
:
getId
,
imClientSender
.
getId
())
);
...
...
@@ -360,6 +362,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
notIn
(
ImConversationMembers:
:
getId
,
imClientSender
.
getId
())
);
...
...
@@ -456,12 +460,151 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
public
ApiResult
<
Boolean
>
leaveConversation
(
ImClientLeaveConversation
imClientToConversation
)
throws
Exception
{
return
null
;
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
// 根据appKey查询application
ImApplication
imApplication
=
imApplicationService
.
getOneByAppKey
(
curentJwtToken
.
getAppKey
());
ImClient
imClientSender
=
imClientService
.
getCurentClient
();
ImConversation
imConversationById
=
imConversationService
.
getById
(
imClientToConversation
.
getConversationId
());
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
orderByAsc
(
ImConversationMembers:
:
getCreateTime
)
.
notIn
(
ImConversationMembers:
:
getId
,
imClientSender
.
getId
())
);
if
(
membersList
.
isEmpty
())
{
log
.
info
(
"membersList为空,toConversationId:"
+
imClientToConversation
.
getConversationId
());
throw
new
Exception
(
"deleteImConversationMembers"
);
}
// 判断用户是否在该会话
ImConversationMembers
members
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
())
);
// 将client从会话移除
boolean
b
=
imConversationMembersService
.
deleteImConversationMembers
(
members
.
getId
());
if
(!
b
)
{
throw
new
Exception
(
"deleteImConversationMembers"
);
}
// ws 退出事件通知给群内其他人 ----------
// 生成消息id
long
messageId
=
SnowflakeUtil
.
getId
();
ImMessage
imMessage
=
new
ImMessage
();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
content
.
put
(
"type"
,
-
1012
);
// xx主动退出会话
try
{
String
asString
=
JSON_MAPPER
.
writeValueAsString
(
content
);
imMessage
.
setContent
(
asString
);
}
catch
(
JsonProcessingException
e
)
{
e
.
printStackTrace
();
}
// 保存消息至消息表
imMessage
.
setId
(
messageId
);
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
imApplication
.
getId
());
imMessage
.
setSender
(
imClientSender
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
true
);
imMessage
.
setSystem
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
imClientToConversation
.
getConversationId
());
boolean
save
=
imMessageService
.
save
(
imMessage
);
if
(!
save
)
{
throw
new
Exception
(
"deleteImConversationMembers"
);
}
// 遍历发送
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
(
messageId
);
imMessageOnlineSend
.
setSender
(
imClientSender
.
getClientId
());
imMessageOnlineSend
.
setContent
((
HashMap
)
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
());
}
// 判断是否为群主
if
(
imConversationById
==
null
||
!
imConversationById
.
getCreator
().
equals
(
imClientSender
.
getId
()))
{
// return ApiResult.result(false);
}
return
ApiResult
.
ok
();
}
@Override
public
ApiResult
<
Boolean
>
saveOrUpdateName
(
ImConversationNameUpdate
imConversationNameUpdate
)
throws
Exception
{
return
null
;
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
// 根据appKey查询application
ImApplication
imApplication
=
imApplicationService
.
getOneByAppKey
(
curentJwtToken
.
getAppKey
());
ImClient
imClientSender
=
imClientService
.
getCurentClient
();
ImConversation
imConversationById
=
imConversationService
.
getById
(
imConversationNameUpdate
.
getConversationId
());
// 判断是否为群主
if
(
imConversationById
==
null
||
!
imConversationById
.
getCreator
().
equals
(
imClientSender
.
getId
()))
{
return
ApiResult
.
result
(
false
);
}
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imConversationNameUpdate
.
getConversationId
())
.
notIn
(
ImConversationMembers:
:
getId
,
imClientSender
.
getId
())
);
imConversationById
.
setName
(
imConversationNameUpdate
.
getName
());
boolean
b
=
imConversationService
.
updateById
(
imConversationById
);
if
(
b
)
{
//TODO 下发群名称变动事件
return
ApiResult
.
ok
();
}
else
{
return
ApiResult
.
fail
();
}
}
@Override
...
...
@@ -483,6 +626,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imConversationAttrUpdate
.
getConversationId
())
.
notIn
(
ImConversationMembers:
:
getId
,
imClientSender
.
getId
())
);
...
...
@@ -500,6 +644,11 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
boolean
b
=
imConversationService
.
updateById
(
imConversationById
);
if
(
b
)
{
//TODO 下发群变动事件
return
ApiResult
.
ok
();
}
else
{
...
...
docs/md/内部/wecloud-im前端Websocket对接文档.md
View file @
4b292cab
# wec
loud-im 前端Websocket对接文档
# wec
loud-im 前端Websocket对接文档
...
...
@@ -207,6 +207,8 @@ wss://ws.im199.com/ws?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ3ZWI
-
xx已接收某消息 -1009
-
xx已读某条消息 -1010
-
你被xx拉入新会话 -1011
-
主动退出会话 -1012
-
成为新群主 -1013
以上基础平台固定类型均使用负数,所有正数留给自定义扩展类型使用,0 作为「没有类型」被保留起来。
...
...
@@ -450,6 +452,85 @@ websocket是异步的 有可能你很快速的发送了几条消息,服务器响
-
xx已读某条消息 -1010
-
你被xx拉入新会话 -1011
-
xx主动退出会话 -1012
-
xx成为新群主 -1013
### 下发 xx成为新群主
"cmd":5
该event事件消息类型需要已读和已接收回执,该消息会存入离线消息列表和消息历史记录列表
```json
{
"cmd":5,
"code":200,
"msg":"成功",
"data":{
"msgId":1427109835333308416,
"createTime":1629086007054,
"sender":"aaaaa1",
"content":{
"type":-1013
},
"event":true,
"conversationId":1427109730563788800
},
"reqId":null
}
```
**参数描述**
| 字段名 | 字段类型 | 是否可空 | 说明 |
| ------ | -------- | -------- | ----------------- |
| sender | String | 否 | 新群主的client ID |
| | | | |
### 下发 xx主动退出会话
"cmd":5
该event事件消息类型需要已读和已接收回执,该消息会存入离线消息列表和消息历史记录列表
```json
{
"cmd":5,
"code":200,
"msg":"成功",
"data":{
"msgId":1427109835333308416,
"createTime":1629086007054,
"sender":"aaaaa1",
"content":{
"type":-1012
},
"event":true,
"conversationId":1427109730563788800
},
"reqId":null
}
```
**参数描述**
| 字段名 | 字段类型 | 是否可空 | 说明 |
| ------ | -------- | -------- | --------------- |
| sender | String | 否 | 退出的client ID |
| | | | |
### 下发 xx被xx移出会话
...
...
@@ -471,6 +552,7 @@ type为-1008
"data":{
"msgId":1427109835333308416,
"createTime":1629086007054,
"sender":"aaaaa1",
"content":{
"operator":"aaaaa1",
"passivityOperator":"aaaaa2",
...
...
@@ -513,6 +595,7 @@ type为-1007
"data":{
"msgId":1427109835333308416,
"createTime":1629086007054,
"sender":"aaaaa1",
"content":{
"operator":"aaaaa1",
"passivityOperator":"aaaaa2",
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment