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
5d05869f
Commit
5d05869f
authored
Mar 16, 2022
by
Future
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
多人音视频邀请逻辑
parent
2f4650cf
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
108 additions
and
9 deletions
+108
-9
core/src/main/java/com/wecloud/im/controller/ImMultiMeetController.java
+2
-1
core/src/main/java/com/wecloud/im/entity/ImMultiRtcRoomMember.java
+3
-0
core/src/main/java/com/wecloud/multimeet/entity/dto/RoomMemberDto.java
+34
-0
core/src/main/java/com/wecloud/multimeet/entity/response/MultiMeetInviteResponse.java
+7
-0
core/src/main/java/com/wecloud/multimeet/service/impl/MultiMeetServiceImpl.java
+59
-6
docs/db/feature-cluster增量.sql
+3
-2
No files found.
core/src/main/java/com/wecloud/im/controller/ImMultiMeetController.java
View file @
5d05869f
...
@@ -14,6 +14,7 @@ import io.swagger.annotations.ApiOperation;
...
@@ -14,6 +14,7 @@ import io.swagger.annotations.ApiOperation;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
...
@@ -38,7 +39,7 @@ public class ImMultiMeetController extends BaseController {
...
@@ -38,7 +39,7 @@ public class ImMultiMeetController extends BaseController {
*/
*/
@PostMapping
(
"/invite"
)
@PostMapping
(
"/invite"
)
@ApiOperation
(
value
=
"邀请加入多人音视频会议"
,
notes
=
"邀请加入多人音视频会议"
)
@ApiOperation
(
value
=
"邀请加入多人音视频会议"
,
notes
=
"邀请加入多人音视频会议"
)
public
ApiResult
<
Boolean
>
invite
(
@RequestBody
InviteToMultiMeetParam
param
)
{
public
ApiResult
<
Boolean
>
invite
(
@
Validated
@
RequestBody
InviteToMultiMeetParam
param
)
{
log
.
info
(
"邀请加入多人音视频会议入参 {}"
,
JSON
.
toJSONString
(
param
));
log
.
info
(
"邀请加入多人音视频会议入参 {}"
,
JSON
.
toJSONString
(
param
));
if
(
CollectionUtils
.
isEmpty
(
param
.
getToClients
()))
{
if
(
CollectionUtils
.
isEmpty
(
param
.
getToClients
()))
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
...
...
core/src/main/java/com/wecloud/im/entity/ImMultiRtcRoomMember.java
View file @
5d05869f
...
@@ -33,6 +33,9 @@ public class ImMultiRtcRoomMember extends BaseEntity {
...
@@ -33,6 +33,9 @@ public class ImMultiRtcRoomMember extends BaseEntity {
@ApiModelProperty
(
"im房间id"
)
@ApiModelProperty
(
"im房间id"
)
private
Long
fkRtcRoomId
;
private
Long
fkRtcRoomId
;
@ApiModelProperty
(
"client主键id"
)
private
Long
fkClientId
;
@ApiModelProperty
(
"客户端id"
)
@ApiModelProperty
(
"客户端id"
)
private
String
clientId
;
private
String
clientId
;
...
...
core/src/main/java/com/wecloud/multimeet/entity/dto/RoomMemberDto.java
0 → 100644
View file @
5d05869f
package
com
.
wecloud
.
multimeet
.
entity
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/3/16 11:21
* @Description 房间成员dto
*/
@Data
public
class
RoomMemberDto
implements
Serializable
{
private
static
final
long
serialVersionUID
=
7634567721658236530L
;
/**
* client主键id
*/
private
Long
fkClientId
;
/**
* 客户端id
*/
private
String
clientId
;
/**
* 多人音视频房间成员状态枚举
* @see com.wecloud.im.enums.MultiRtcMemberStateEnum
*/
private
Integer
state
;
}
core/src/main/java/com/wecloud/multimeet/entity/response/MultiMeetInviteResponse.java
View file @
5d05869f
package
com
.
wecloud
.
multimeet
.
entity
.
response
;
package
com
.
wecloud
.
multimeet
.
entity
.
response
;
import
com.wecloud.multimeet.entity.dto.RoomMemberDto
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.EqualsAndHashCode
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.util.List
;
/**
/**
* @Author wenzhida
* @Author wenzhida
...
@@ -24,4 +26,9 @@ public class MultiMeetInviteResponse extends MultiMeetDataBase implements Serial
...
@@ -24,4 +26,9 @@ public class MultiMeetInviteResponse extends MultiMeetDataBase implements Serial
*/
*/
private
String
roomId
;
private
String
roomId
;
/**
* 成员列表dto
*/
private
List
<
RoomMemberDto
>
memberDtoList
;
}
}
core/src/main/java/com/wecloud/multimeet/service/impl/MultiMeetServiceImpl.java
View file @
5d05869f
package
com
.
wecloud
.
multimeet
.
service
.
impl
;
package
com
.
wecloud
.
multimeet
.
service
.
impl
;
import
java.util.Date
;
import
java.util.List
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.google.common.collect.Lists
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImConversationMembers
;
import
com.wecloud.im.entity.ImMultiRtcRoom
;
import
com.wecloud.im.entity.ImMultiRtcRoomMember
;
import
com.wecloud.im.enums.MultiRtcMemberStateEnum
;
import
com.wecloud.im.enums.MultiRtcRoomStateEnum
;
import
com.wecloud.im.param.AgreeToMultiMeetParam
;
import
com.wecloud.im.param.AgreeToMultiMeetParam
;
import
com.wecloud.im.param.InviteToMultiMeetParam
;
import
com.wecloud.im.param.InviteToMultiMeetParam
;
import
com.wecloud.im.param.LeaveFromMultiMeetParam
;
import
com.wecloud.im.param.LeaveFromMultiMeetParam
;
import
com.wecloud.im.param.RejectToMultiMeetParam
;
import
com.wecloud.im.param.RejectToMultiMeetParam
;
import
com.wecloud.im.param.rtc.CreateRtcChannelResult
;
import
com.wecloud.im.param.rtc.CreateRtcChannelResult
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.service.ImMultiRtcRoomMemberService
;
import
com.wecloud.im.service.ImMultiRtcRoomService
;
import
com.wecloud.im.ws.cache.UserStateCacheManager
;
import
com.wecloud.im.ws.cache.UserStateCacheManager
;
import
com.wecloud.multimeet.entity.dto.RoomMemberDto
;
import
com.wecloud.multimeet.entity.response.MultiMeetAgreeResponse
;
import
com.wecloud.multimeet.entity.response.MultiMeetAgreeResponse
;
import
com.wecloud.multimeet.entity.response.MultiMeetInviteResponse
;
import
com.wecloud.multimeet.entity.response.MultiMeetInviteResponse
;
import
com.wecloud.multimeet.entity.response.MultiMeetLeaveResponse
;
import
com.wecloud.multimeet.entity.response.MultiMeetLeaveResponse
;
...
@@ -38,6 +51,12 @@ public class MultiMeetServiceImpl implements MultiMeetService {
...
@@ -38,6 +51,12 @@ public class MultiMeetServiceImpl implements MultiMeetService {
@Autowired
@Autowired
private
UserStateCacheManager
userStateCacheManager
;
private
UserStateCacheManager
userStateCacheManager
;
@Autowired
private
ImMultiRtcRoomService
imMultiRtcRoomService
;
@Autowired
private
ImMultiRtcRoomMemberService
imMultiRtcRoomMemberService
;
@Override
@Override
public
void
invite
(
InviteToMultiMeetParam
param
)
{
public
void
invite
(
InviteToMultiMeetParam
param
)
{
ImClient
currentClient
=
imClientService
.
getCurrentClient
();
ImClient
currentClient
=
imClientService
.
getCurrentClient
();
...
@@ -47,20 +66,54 @@ public class MultiMeetServiceImpl implements MultiMeetService {
...
@@ -47,20 +66,54 @@ public class MultiMeetServiceImpl implements MultiMeetService {
log
.
info
(
"发起方必须在线"
+
currentClient
.
getFkAppid
()
+
currentClient
.
getClientId
());
log
.
info
(
"发起方必须在线"
+
currentClient
.
getFkAppid
()
+
currentClient
.
getClientId
());
throw
new
BusinessException
(
"发起方必须在线"
);
throw
new
BusinessException
(
"发起方必须在线"
);
}
}
for
(
String
toClient
:
param
.
getToClients
())
{
List
<
RoomMemberDto
>
members
=
Lists
.
newArrayList
();
ImClient
receiver
=
imClientService
.
getCacheImClient
(
currentClient
.
getFkAppid
(),
toClient
);
ImMultiRtcRoom
rtcRoom
=
imMultiRtcRoomService
.
getOne
(
new
QueryWrapper
<
ImMultiRtcRoom
>().
lambda
()
if
(
receiver
==
null
)
{
.
eq
(
ImMultiRtcRoom:
:
getFkAppid
,
currentClient
.
getFkAppid
())
log
.
info
(
"查无接收人信息 {}"
,
toClient
);
.
eq
(
ImMultiRtcRoom:
:
getRoomId
,
param
.
getRoomId
()));
if
(
rtcRoom
==
null
)
{
rtcRoom
=
new
ImMultiRtcRoom
();
rtcRoom
.
setId
(
SnowflakeUtil
.
getId
());
rtcRoom
.
setFkAppid
(
currentClient
.
getFkAppid
());
rtcRoom
.
setRoomId
(
param
.
getRoomId
());
rtcRoom
.
setState
(
MultiRtcRoomStateEnum
.
CREATED
.
getCode
());
rtcRoom
.
setCreateTime
(
new
Date
());
rtcRoom
.
setUpdateTime
(
new
Date
());
imMultiRtcRoomService
.
save
(
rtcRoom
);
}
else
{
List
<
ImMultiRtcRoomMember
>
rtcRoomMemberList
=
imMultiRtcRoomMemberService
.
list
(
new
QueryWrapper
<
ImMultiRtcRoomMember
>().
lambda
()
.
eq
(
ImMultiRtcRoomMember:
:
getFkRtcRoomId
,
rtcRoom
.
getId
())
.
ne
(
ImMultiRtcRoomMember:
:
getClientId
,
currentClient
.
getClientId
())
);
for
(
ImMultiRtcRoomMember
imMultiRtcRoomMember
:
rtcRoomMemberList
)
{
RoomMemberDto
roomMemberDto
=
new
RoomMemberDto
();
roomMemberDto
.
setFkClientId
(
imMultiRtcRoomMember
.
getFkClientId
());
roomMemberDto
.
setClientId
(
imMultiRtcRoomMember
.
getClientId
());
roomMemberDto
.
setState
(
imMultiRtcRoomMember
.
getState
());
members
.
add
(
roomMemberDto
);
}
}
for
(
String
toClientId
:
param
.
getToClients
())
{
ImClient
toClient
=
imClientService
.
getCacheImClient
(
currentClient
.
getFkAppid
(),
toClientId
);
if
(
toClient
==
null
)
{
log
.
info
(
"查无接收人信息 {}"
,
toClientId
);
continue
;
continue
;
}
}
RoomMemberDto
roomMemberDto
=
new
RoomMemberDto
();
roomMemberDto
.
setFkClientId
(
toClient
.
getId
());
roomMemberDto
.
setClientId
(
toClient
.
getClientId
());
roomMemberDto
.
setState
(
MultiRtcMemberStateEnum
.
CALLING
.
getCode
());
members
.
add
(
roomMemberDto
);
}
for
(
RoomMemberDto
member
:
members
)
{
// ws向接收方发送通知
// ws向接收方发送通知
MultiMeetInviteResponse
multiMeetInviteResponse
=
new
MultiMeetInviteResponse
();
MultiMeetInviteResponse
multiMeetInviteResponse
=
new
MultiMeetInviteResponse
();
multiMeetInviteResponse
.
setConversationId
(
param
.
getConversationId
());
multiMeetInviteResponse
.
setConversationId
(
param
.
getConversationId
());
multiMeetInviteResponse
.
setRoomId
(
param
.
getRoomId
());
multiMeetInviteResponse
.
setRoomId
(
param
.
getRoomId
());
multiMeetInviteResponse
.
setClientId
(
currentClient
.
getClientId
());
multiMeetInviteResponse
.
setClientId
(
currentClient
.
getClientId
());
multiMeetInviteResponse
.
setTimestamp
(
System
.
currentTimeMillis
());
multiMeetInviteResponse
.
setTimestamp
(
System
.
currentTimeMillis
());
multiMeetInviteResponse
.
setMemberDtoList
(
members
);
wsMultiMeetWrite
.
invite
(
multiMeetInviteResponse
,
receiver
.
ge
tId
());
wsMultiMeetWrite
.
invite
(
multiMeetInviteResponse
,
member
.
getFkClien
tId
());
// TODO 待开发 下发安卓和ios系统推送
// TODO 待开发 下发安卓和ios系统推送
}
}
...
...
docs/db/feature-cluster增量.sql
View file @
5d05869f
-- 在f
eature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
-- 在f
eature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
...
@@ -136,7 +136,8 @@ CREATE TABLE `im_multi_rtc_room_member`
...
@@ -136,7 +136,8 @@ CREATE TABLE `im_multi_rtc_room_member`
(
(
`id`
bigint
NOT
NULL
COMMENT
'主键id'
,
`id`
bigint
NOT
NULL
COMMENT
'主键id'
,
`fk_rtc_room_id`
bigint
NOT
NULL
COMMENT
'im房间id'
,
`fk_rtc_room_id`
bigint
NOT
NULL
COMMENT
'im房间id'
,
`client_id`
bigint
NOT
NULL
COMMENT
'客户端id'
,
`fk_client_id`
bigint
NOT
NULL
COMMENT
'client主键id'
,
`client_id`
varchar
(
200
)
DEFAULT
NULL
COMMENT
'客户方提供的唯一id'
,
`state`
tinyint
NOT
NULL
DEFAULT
'1'
COMMENT
'房间成员状态,1:呼叫中,2:已接听,3:已拒绝,4:未接听,5:已断开'
,
`state`
tinyint
NOT
NULL
DEFAULT
'1'
COMMENT
'房间成员状态,1:呼叫中,2:已接听,3:已拒绝,4:未接听,5:已断开'
,
`create_time`
timestamp
NULL
DEFAULT
NULL
COMMENT
'创建时间'
,
`create_time`
timestamp
NULL
DEFAULT
NULL
COMMENT
'创建时间'
,
`update_time`
timestamp
NULL
DEFAULT
NULL
ON
UPDATE
CURRENT_TIMESTAMP
COMMENT
'修改时间'
,
`update_time`
timestamp
NULL
DEFAULT
NULL
ON
UPDATE
CURRENT_TIMESTAMP
COMMENT
'修改时间'
,
...
...
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