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
0d8525e6
Commit
0d8525e6
authored
Oct 08, 2022
by
Future
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rizhi
parent
14ae576c
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
27 additions
and
4 deletions
+27
-4
core/src/main/java/com/wecloud/im/action/NormalChatAction.java
+25
-4
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
+2
-0
No files found.
core/src/main/java/com/wecloud/im/action/NormalChatAction.java
View file @
0d8525e6
...
...
@@ -98,23 +98,31 @@ public class NormalChatAction {
// if (log.isDebugEnabled()) {
// log.debug("接收到参数,reqId: {},\n data: {}, ", reqId, data);
// }
Long
conTime
=
System
.
currentTimeMillis
();
ImConversationQueryVo
conversation
=
ehcacheService
.
getEhCacheConversation
(
data
.
getToConversation
());
log
.
info
(
"获取会话缓存耗时 {}"
,
System
.
currentTimeMillis
()
-
conTime
);
if
(
conversation
==
null
)
{
log
.
warn
(
"会reqId: {} ,会话id: {}db中不存在"
,
reqId
,
data
.
getToConversation
());
return
;
}
// 查询发送者client
Long
clientTime
=
System
.
currentTimeMillis
();
ImClient
imClientSender
=
ehcacheService
.
getEhCacheClient
(
request
.
getSenderClientId
());
log
.
info
(
"获取用户缓存耗时 {}"
,
System
.
currentTimeMillis
()
-
clientTime
);
if
(
imClientSender
==
null
)
{
log
.
warn
(
"根据senderClientId: {} 查找不到 imClientSender!"
,
request
.
getSenderClientId
());
return
;
}
// 查询imApplication
Long
appTime
=
System
.
currentTimeMillis
();
ImApplication
imApplication
=
imApplicationService
.
getCacheById
(
imClientSender
.
getFkAppid
());
log
.
info
(
"获取app缓存耗时 {}"
,
System
.
currentTimeMillis
()
-
appTime
);
// 给所有人(在线+离线)遍历发送
// 先查询该会话所有成员
Long
memberTime
=
System
.
currentTimeMillis
();
List
<
ImConversationMembers
>
membersList
=
ehcacheService
.
getEhCacheMember
(
"member"
+
conversation
.
getId
(),
conversation
.
getId
());
log
.
info
(
"获取成员缓存耗时 {}"
,
System
.
currentTimeMillis
()
-
memberTime
);
if
(
membersList
.
isEmpty
())
{
log
.
info
(
"查询会话所有成员返回空,会话ID: {}"
,
data
.
getToConversation
());
WsResponse
<
HashMap
<
String
,
Long
>>
responseModel
=
new
WsResponse
<>();
...
...
@@ -126,8 +134,11 @@ public class NormalChatAction {
channelSender
.
sendMsgLocal
((
NioSocketChannel
)
request
.
getSenderChannel
(),
responseModel
);
return
;
}
Long
memberMapTime
=
System
.
currentTimeMillis
();
Map
<
Long
,
ImConversationMembers
>
memberMap
=
membersList
.
stream
().
collect
(
Collectors
.
toMap
(
ImConversationMembers:
:
getFkClientId
,
member
->
member
));
log
.
info
(
"获取成员map耗时 {}"
,
System
.
currentTimeMillis
()
-
memberMapTime
);
Long
checkTime
=
System
.
currentTimeMillis
();
// 判断为单聊
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
conversation
.
getChatType
()))
{
// 判断是否被拉黑逻辑
...
...
@@ -150,14 +161,22 @@ public class NormalChatAction {
return
;
}
}
log
.
info
(
"消息校验耗时 {}"
,
System
.
currentTimeMillis
()
-
checkTime
);
Long
neirongTime
=
System
.
currentTimeMillis
();
// 消息内容校验
if
(!
checkMsg
(
imClientSender
,
conversation
,
reqId
,
data
,
request
.
getSenderChannel
(),
memberMap
))
{
return
;
}
log
.
info
(
"消息校验耗时 {}"
,
System
.
currentTimeMillis
()
-
neirongTime
);
Long
messageTime
=
System
.
currentTimeMillis
();
ImMessageOnlineSend
imMessageOnlineSend
=
assembleImMessageOnlineSend
(
data
,
imClientSender
,
imApplication
.
getId
());
log
.
info
(
"消息校验耗时 {}"
,
System
.
currentTimeMillis
()
-
messageTime
);
// 入库 保存收件箱
Long
inboxTime
=
System
.
currentTimeMillis
();
batchSaveInbox
(
imApplication
,
imClientSender
,
conversation
,
imMessageOnlineSend
.
getMsgId
(),
membersList
);
log
.
info
(
"收件箱耗时 {}"
,
System
.
currentTimeMillis
()
-
inboxTime
);
// 入库成功后 判断是否是临时会话 如果是,双方会话display状态是否是1(显示),如果不是,需要修改为是
if
(
ChatTypeEnum
.
TEMP
.
getCode
().
equals
(
conversation
.
getChatType
()))
{
// 木有只有私聊一种临时会话类型
...
...
@@ -172,6 +191,7 @@ public class NormalChatAction {
imConversationMembersService
.
updateBatchById
(
tempMemberToUpdate
);
}
}
Long
pushTime
=
System
.
currentTimeMillis
();
final
Boolean
isPush
=
ehcacheService
.
getIsPush
(
"push"
+
conversation
.
getId
());
// 多线程处理消息下发
for
(
ImConversationMembers
member
:
membersList
)
{
...
...
@@ -183,14 +203,19 @@ public class NormalChatAction {
this
.
sendMsgToMember
(
imApplication
,
member
,
imMessageOnlineSend
,
data
.
getPush
(),
isPush
);
});
}
log
.
info
(
"push耗时 {}"
,
System
.
currentTimeMillis
()
-
pushTime
);
// 响应发送方消息id等信息
Long
resTime
=
System
.
currentTimeMillis
();
response
(
reqId
,
imMessageOnlineSend
.
getMsgId
(),
request
.
getSenderChannel
());
log
.
info
(
"响应耗时 {}"
,
System
.
currentTimeMillis
()
-
resTime
);
}
private
void
sendMsgToMember
(
ImApplication
imApplication
,
ImConversationMembers
member
,
ImMessageOnlineSend
imMessageOnlineSend
,
PushVO
push
,
Boolean
isPush
)
{
// 在线用户直接发消息
Long
onlienTime
=
System
.
currentTimeMillis
();
Boolean
sendSuccess
=
sendMsgForOnline
(
member
.
getFkClientId
(),
imMessageOnlineSend
);
log
.
info
(
"单用户在线下发耗时 {}"
,
System
.
currentTimeMillis
()
-
onlienTime
);
if
(
isPush
&&
!
sendSuccess
&&
!
member
.
getDoNotDisturb
())
{
// 异步推送系统通知消息 5分钟内推一次消息
PushDTO
pushDTO
=
mqSender
.
buildPushDto
(
push
,
member
.
getFkClientId
(),
member
.
getClientId
(),
imApplication
);
...
...
@@ -229,11 +254,8 @@ public class NormalChatAction {
private
ImMessageOnlineSend
assembleImMessageOnlineSend
(
ChatContentVo
data
,
ImClient
imClientSender
,
Long
appId
)
{
// 入库 保存消息至消息表
ImClientSimpleDto
client
=
new
ImClientSimpleDto
().
setId
(
imClientSender
.
getId
()).
setFkAppid
(
appId
);
Long
time
=
System
.
currentTimeMillis
();
ImMessage
imMessage
=
imMessageService
.
saveImMessage
(
client
,
data
);
log
.
info
(
"外层插入落库耗时 {}"
,
System
.
currentTimeMillis
()
-
time
);
Long
resTime
=
System
.
currentTimeMillis
();
// 封装响应的实体
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
imMessageOnlineSend
.
setMsgId
(
imMessage
.
getId
());
...
...
@@ -250,7 +272,6 @@ public class NormalChatAction {
imMessageOnlineSend
.
setSystemFlag
(
imMessage
.
getSystemFlag
());
imMessageOnlineSend
.
setType
(
data
.
getType
());
imMessageOnlineSend
.
setAt
(
imMessage
.
getAt
());
log
.
info
(
"构造响应时间 {}"
,
System
.
currentTimeMillis
()
-
resTime
);
return
imMessageOnlineSend
;
}
...
...
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
View file @
0d8525e6
...
...
@@ -224,7 +224,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
// 数据库字段类型为JSON格式
// 因mysql关系型数据库非MongoDB文档类型数据库,第三方应用拓展的自定义参数名和值需使用json格式落库
Long
jsonTime
=
System
.
currentTimeMillis
();
String
contentJsonString
=
JsonUtils
.
encodeJson
(
data
);
log
.
info
(
"encode json time {}"
,
System
.
currentTimeMillis
()-
jsonTime
);
imMessage
.
setContent
(
contentJsonString
);
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
...
...
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