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
f6ff39ed
Commit
f6ff39ed
authored
Apr 27, 2022
by
Future
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
聊天室
parent
22832b70
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
205 additions
and
2 deletions
+205
-2
core/src/main/java/com/wecloud/im/chatroom/action/ChatRoomAction.java
+160
-0
core/src/main/java/com/wecloud/im/friend/controller/ImFriendController.java
+2
-0
core/src/main/java/com/wecloud/im/param/add/ImConversationCreate.java
+1
-1
core/src/main/java/com/wecloud/im/sdk/enums/ChatTypeEnum.java
+2
-1
core/src/main/java/com/wecloud/im/sdk/enums/FriendSourceEnum.java
+40
-0
No files found.
core/src/main/java/com/wecloud/im/chatroom/action/ChatRoomAction.java
0 → 100644
View file @
f6ff39ed
package
com
.
wecloud
.
im
.
chatroom
.
action
;
import
com.wecloud.dispatch.annotation.ActionMapping
;
import
com.wecloud.dispatch.common.BaseRequest
;
import
com.wecloud.dispatch.extend.ActionRequest
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImMessageOnlineSend
;
import
com.wecloud.im.param.ChatContentVo
;
import
com.wecloud.im.param.ImConversationQueryVo
;
import
com.wecloud.im.param.MsgVo
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.service.ImConversationMembersService
;
import
com.wecloud.im.service.ImConversationService
;
import
com.wecloud.im.thousandchat.cache.ThousandChatCacheManager
;
import
com.wecloud.im.ws.enums.WsResponseCmdEnum
;
import
com.wecloud.im.ws.model.WsResponse
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.utils.JsonUtils
;
import
com.wecloud.utils.SnowflakeUtil
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.netty.channel.Channel
;
import
io.netty.channel.socket.nio.NioSocketChannel
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
/**
* @Author wenzhida
* @Date 2022/4/26 21:05
* @Description 聊天室消息处理
*/
@Slf4j
@Component
@ActionMapping
@Api
(
value
=
"聊天室消息处理"
,
tags
=
{
"聊天室消息处理"
})
public
class
ChatRoomAction
{
@Autowired
private
ImApplicationService
imApplicationService
;
@Autowired
private
ImClientService
imClientService
;
@Autowired
private
ImConversationService
imConversationService
;
@Autowired
private
ChannelSender
channelSender
;
@Autowired
private
ThousandChatCacheManager
thousandChatCacheManager
;
@ActionMapping
(
"/chat/chatroom/send"
)
@ApiOperation
(
value
=
"聊天室消息发送"
)
public
void
sendMsg
(
ActionRequest
request
,
ChatContentVo
data
,
String
reqId
)
{
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"接收到参数,reqId: {},\n data: {}, "
,
data
);
}
ImConversationQueryVo
conversation
=
imConversationService
.
getCacheImConversationById
(
data
.
getToConversation
());
if
(
conversation
==
null
)
{
log
.
warn
(
"reqId: {} ,会话id: {} db 中不存在"
,
reqId
,
data
.
getToConversation
());
return
;
}
// 查询发送者client
ImClient
imClientSender
=
imClientService
.
getCacheImClient
(
request
.
getSenderClientId
());
if
(
imClientSender
==
null
)
{
log
.
warn
(
"根据senderClientId: {} 查找不到 imClientSender!"
,
request
.
getSenderClientId
());
return
;
}
// 查询imApplication
ImApplication
imApplication
=
imApplicationService
.
getCacheById
(
imClientSender
.
getFkAppid
());
if
(
imApplication
==
null
)
{
log
.
warn
(
"根据appId: {} 查找不到 imApplication!"
,
imClientSender
.
getFkAppid
());
return
;
}
ImMessageOnlineSend
imMessageOnlineSend
=
assembleImMessageOnlineSend
(
data
,
imClientSender
,
imApplication
.
getId
());
// 在线用户直接发消息
sendMsgForOnline
(
data
,
imMessageOnlineSend
);
// 响应发送方消息id等信息
response
(
reqId
,
imMessageOnlineSend
.
getMsgId
(),
request
.
getSenderChannel
());
}
/**
* 发送消息给在线客户
*
* @param data
* @param imMessageOnlineSend
*/
private
void
sendMsgForOnline
(
ChatContentVo
data
,
ImMessageOnlineSend
imMessageOnlineSend
)
{
Map
<
String
/** ip **/
,
List
<
String
/** client的主键ID:platform **/
>>
onlineIpClientMap
=
thousandChatCacheManager
.
findOnlineHostsByThousandGroupId
(
data
.
getToConversation
());
// 封装要推给接收方的消息
WsResponse
<
ImMessageOnlineSend
>
responseModel
=
new
WsResponse
<>();
responseModel
.
setCmd
(
WsResponseCmdEnum
.
ONLINE_MSG
.
getCmdCode
());
ApiResult
<
Boolean
>
result
=
ApiResult
.
result
(
ApiCode
.
SUCCESS
);
responseModel
.
setCode
(
result
.
getCode
());
responseModel
.
setMsg
(
result
.
getMessage
());
responseModel
.
setData
(
imMessageOnlineSend
);
responseModel
.
setReqId
(
null
);
onlineIpClientMap
.
forEach
((
ip
,
clientIdAndPlatforms
)
->
{
channelSender
.
batchSendMsg
(
responseModel
,
ip
,
clientIdAndPlatforms
);
});
}
/**
* 拼装发送消息体
*
* @param data
* @param imClientSender
* @param appId
* @return
*/
private
ImMessageOnlineSend
assembleImMessageOnlineSend
(
ChatContentVo
data
,
ImClient
imClientSender
,
Long
appId
)
{
// 生成消息id
long
messageId
=
SnowflakeUtil
.
getId
();
// 封装响应的实体
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
imMessageOnlineSend
.
setMsgId
(
messageId
);
imMessageOnlineSend
.
setSender
(
imClientSender
.
getClientId
());
Map
<
String
,
Object
>
content
=
JsonUtils
.
beanCopyDeep
(
data
,
Map
.
class
);
//action的属性无需要返回
content
.
remove
(
BaseRequest
.
ACTION
);
imMessageOnlineSend
.
setContent
(
content
);
imMessageOnlineSend
.
setConversationId
(
data
.
getToConversation
());
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setWithdrawTime
(
null
);
imMessageOnlineSend
.
setWithdraw
(
false
);
imMessageOnlineSend
.
setEvent
(
false
);
imMessageOnlineSend
.
setSystemFlag
(
false
);
imMessageOnlineSend
.
setType
(
data
.
getType
());
imMessageOnlineSend
.
setAt
(
data
.
getAt
());
return
imMessageOnlineSend
;
}
/**
* 响应发送方消息id等信息
*
* @param reqId
* @param messageId
* @param channel
*/
private
void
response
(
String
reqId
,
long
messageId
,
Channel
channel
)
{
WsResponse
<
MsgVo
>
responseModel
=
new
WsResponse
<>();
ApiResult
<
Boolean
>
result
=
ApiResult
.
result
(
ApiCode
.
SUCCESS
);
responseModel
.
setCmd
(
WsResponseCmdEnum
.
RES
.
getCmdCode
());
responseModel
.
setCode
(
result
.
getCode
());
responseModel
.
setMsg
(
result
.
getMessage
());
responseModel
.
setData
(
new
MsgVo
(
messageId
));
responseModel
.
setReqId
(
reqId
);
// 响应发送方
channelSender
.
sendMsgLocal
((
NioSocketChannel
)
channel
,
responseModel
);
}
}
core/src/main/java/com/wecloud/im/friend/controller/ImFriendController.java
View file @
f6ff39ed
...
@@ -87,6 +87,8 @@ public class ImFriendController extends BaseController {
...
@@ -87,6 +87,8 @@ public class ImFriendController extends BaseController {
if
(
param
==
null
)
{
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
}
ImClient
currentClient
=
imClientService
.
getCurrentClient
();
ImClient
currentClient
=
imClientService
.
getCurrentClient
();
if
(
currentClient
==
null
)
{
if
(
currentClient
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
...
...
core/src/main/java/com/wecloud/im/param/add/ImConversationCreate.java
View file @
f6ff39ed
...
@@ -33,7 +33,7 @@ public class ImConversationCreate extends BaseEntity {
...
@@ -33,7 +33,7 @@ public class ImConversationCreate extends BaseEntity {
@ApiModelProperty
(
"可选 邀请加入会话的客户端,如创建单聊,则填入对方的clientId"
)
@ApiModelProperty
(
"可选 邀请加入会话的客户端,如创建单聊,则填入对方的clientId"
)
private
List
<
String
>
clientIds
;
private
List
<
String
>
clientIds
;
@ApiModelProperty
(
"会话属性,1:单聊,2:普通群,3:万人群"
)
@ApiModelProperty
(
"会话属性,1:单聊,2:普通群,3:万人群
, 4:聊天室
"
)
@NotNull
(
message
=
"会话类型不能为空"
)
@NotNull
(
message
=
"会话类型不能为空"
)
private
Integer
chatType
;
private
Integer
chatType
;
...
...
core/src/main/java/com/wecloud/im/sdk/enums/ChatTypeEnum.java
View file @
f6ff39ed
...
@@ -11,7 +11,8 @@ public enum ChatTypeEnum implements BaseEnum {
...
@@ -11,7 +11,8 @@ public enum ChatTypeEnum implements BaseEnum {
SINGLE
(
1
,
"单聊"
),
SINGLE
(
1
,
"单聊"
),
NORMAL_GROUP
(
2
,
"普通群"
),
NORMAL_GROUP
(
2
,
"普通群"
),
THOUSAND_GROUP
(
3
,
"万人群"
);
THOUSAND_GROUP
(
3
,
"万人群"
),
CHAT_ROOM
(
4
,
"聊天室"
);
private
final
Integer
code
;
private
final
Integer
code
;
private
final
String
desc
;
private
final
String
desc
;
...
...
core/src/main/java/com/wecloud/im/sdk/enums/FriendSourceEnum.java
0 → 100644
View file @
f6ff39ed
package
com
.
wecloud
.
im
.
sdk
.
enums
;
/**
* @Author wenzhida
* @Date 2022/4/27 10:28
* @Description 添加好友来源枚举
*/
public
enum
FriendSourceEnum
{
/**
* 1 - 搜索
*/
SEARCH
(
"SEARCH"
,
"搜索"
),
/**
* 2 - 群聊
*/
GROUP
(
"GROUP"
,
"群聊"
),
/**
* 3 - 名片
*/
CARD
(
"CARD"
,
"名片"
);
FriendSourceEnum
(
String
code
,
String
desc
)
{
this
.
code
=
code
;
this
.
desc
=
desc
;
}
private
final
String
code
;
private
final
String
desc
;
public
String
getCode
()
{
return
this
.
code
;
}
public
String
getDesc
()
{
return
this
.
desc
;
}
}
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