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
95d4132a
Commit
95d4132a
authored
Mar 07, 2022
by
Future
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
对接多人音视频
parent
673029d4
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
396 additions
and
0 deletions
+396
-0
core/src/main/java/com/wecloud/im/controller/ImMultiMeetController.java
+57
-0
core/src/main/java/com/wecloud/im/param/InviteToMultiMeetParam.java
+34
-0
core/src/main/java/com/wecloud/im/param/RejectToMultiMeetParam.java
+19
-0
core/src/main/java/com/wecloud/im/ws/enums/WsMultiMeetResponseSubCmdEnum.java
+29
-0
core/src/main/java/com/wecloud/im/ws/enums/WsResponseCmdEnum.java
+5
-0
core/src/main/java/com/wecloud/multimeet/entity/response/MultiMeetDataBase.java
+25
-0
core/src/main/java/com/wecloud/multimeet/entity/response/MultiMeetInviteResponse.java
+22
-0
core/src/main/java/com/wecloud/multimeet/entity/response/MultiMeetRejectResponse.java
+17
-0
core/src/main/java/com/wecloud/multimeet/service/MultiMeetService.java
+29
-0
core/src/main/java/com/wecloud/multimeet/service/WsMultiMeetWrite.java
+27
-0
core/src/main/java/com/wecloud/multimeet/service/impl/MultiMeetServiceImpl.java
+75
-0
core/src/main/java/com/wecloud/multimeet/service/impl/WsMultiMeetWriteImpl.java
+57
-0
No files found.
core/src/main/java/com/wecloud/im/controller/ImMultiMeetController.java
0 → 100644
View file @
95d4132a
package
com
.
wecloud
.
im
.
controller
;
import
com.wecloud.im.param.InviteToMultiMeetParam
;
import
com.wecloud.im.param.RejectToMultiMeetParam
;
import
com.wecloud.im.param.rtc.RejectRtcChannelParam
;
import
com.wecloud.multimeet.service.MultiMeetService
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* @Author wenzhida
* @Date 2022/3/7 18:08
* @Description 多人音视频通话控制器
*/
@Slf4j
@RestController
@RequestMapping
(
"/multiMeet"
)
@Api
(
value
=
"多人音视频通话"
,
tags
=
{
"多人音视频通话"
})
public
class
ImMultiMeetController
extends
BaseController
{
@Autowired
private
MultiMeetService
multiMeetService
;
/**
* 创建频道,并邀请客户端加入
*/
@PostMapping
(
"/invite"
)
@ApiOperation
(
value
=
"邀请加入"
,
notes
=
"邀请加入"
)
public
ApiResult
<
Boolean
>
invite
(
@RequestBody
InviteToMultiMeetParam
param
)
{
if
(
CollectionUtils
.
isEmpty
(
param
.
getToClients
()))
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
multiMeetService
.
invite
(
param
);
return
ApiResult
.
ok
();
}
@PostMapping
(
"/reject"
)
@ApiOperation
(
value
=
"拒接进入频道"
,
notes
=
""
)
public
ApiResult
<
Boolean
>
reject
(
@RequestBody
RejectToMultiMeetParam
param
)
{
multiMeetService
.
reject
(
param
);
return
ApiResult
.
ok
();
}
}
core/src/main/java/com/wecloud/im/param/InviteToMultiMeetParam.java
0 → 100644
View file @
95d4132a
package
com
.
wecloud
.
im
.
param
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* @Author wenzhida
* @Date 2022/3/7 19:09
* @Description 邀请加入多人会议室
*/
@Data
@ApiModel
(
value
=
"邀请加入多人会议室"
)
public
class
InviteToMultiMeetParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
6815250319056125934L
;
@ApiModelProperty
(
value
=
"绑定的会话id,可选"
,
required
=
false
)
private
Long
conversationId
;
@ApiModelProperty
(
value
=
"被邀请的客户端ID列表"
,
required
=
true
)
private
List
<
String
>
toClients
;
@ApiModelProperty
(
value
=
"接收方展示的系统推送内容"
,
required
=
false
)
private
String
push
;
@ApiModelProperty
(
value
=
"是否需要给对方发系统通知"
,
required
=
true
)
private
Boolean
pushCall
;
}
core/src/main/java/com/wecloud/im/param/RejectToMultiMeetParam.java
0 → 100644
View file @
95d4132a
package
com
.
wecloud
.
im
.
param
;
import
io.swagger.annotations.ApiModel
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/3/7 22:18
* @Description 拒接加入会议
*/
@Data
@ApiModel
(
value
=
"RejectRtcChannelParam"
)
public
class
RejectToMultiMeetParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
249558750895602938L
;
}
core/src/main/java/com/wecloud/im/ws/enums/WsMultiMeetResponseSubCmdEnum.java
0 → 100644
View file @
95d4132a
package
com
.
wecloud
.
im
.
ws
.
enums
;
/**
* @Author wenzhida
* @Date 2022/3/7 22:13
* @Description 多人音视频响应类型
*/
public
enum
WsMultiMeetResponseSubCmdEnum
{
/**
* 邀请
*/
INVITE
(
1
),
/**
* 拒接邀请
*/
REJECT
(
2
);
private
final
int
cmdCode
;
WsMultiMeetResponseSubCmdEnum
(
int
cmdCode
)
{
this
.
cmdCode
=
cmdCode
;
}
public
int
getCmdCode
()
{
return
cmdCode
;
}
}
core/src/main/java/com/wecloud/im/ws/enums/WsResponseCmdEnum.java
View file @
95d4132a
...
@@ -8,6 +8,11 @@ package com.wecloud.im.ws.enums;
...
@@ -8,6 +8,11 @@ package com.wecloud.im.ws.enums;
public
enum
WsResponseCmdEnum
{
public
enum
WsResponseCmdEnum
{
/**
/**
* 下发在线多人音视频事件
*/
MULTI_MEET_MSG
(
8
),
/**
* 服务端下发通知型消息,例如:好友申请,好友认证结果.
* 服务端下发通知型消息,例如:好友申请,好友认证结果.
* 参数值参考{@link com.wecloud.im.enums.EventResponseSubCmdEnum EventResponseSubCmdEnum}
* 参数值参考{@link com.wecloud.im.enums.EventResponseSubCmdEnum EventResponseSubCmdEnum}
*/
*/
...
...
core/src/main/java/com/wecloud/multimeet/entity/response/MultiMeetDataBase.java
0 → 100644
View file @
95d4132a
package
com
.
wecloud
.
multimeet
.
entity
.
response
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/3/7 22:01
* @Description 多人音视频会议长连接响应基类
*/
@Data
public
class
MultiMeetDataBase
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
4151469100462562164L
;
/**
* 子指令
*/
private
Integer
subCmd
;
private
String
clientId
;
private
Long
timestamp
;
}
core/src/main/java/com/wecloud/multimeet/entity/response/MultiMeetInviteResponse.java
0 → 100644
View file @
95d4132a
package
com
.
wecloud
.
multimeet
.
entity
.
response
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/3/7 22:02
* @Description 邀请加入多人音视频会议
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@Data
public
class
MultiMeetInviteResponse
extends
MultiMeetDataBase
implements
Serializable
{
/**
* 会话id
*/
private
Long
conversationId
;
}
core/src/main/java/com/wecloud/multimeet/entity/response/MultiMeetRejectResponse.java
0 → 100644
View file @
95d4132a
package
com
.
wecloud
.
multimeet
.
entity
.
response
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/3/7 22:21
* @Description 拒绝进入多人音视频
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@Data
public
class
MultiMeetRejectResponse
extends
MultiMeetDataBase
implements
Serializable
{
}
core/src/main/java/com/wecloud/multimeet/service/MultiMeetService.java
0 → 100644
View file @
95d4132a
package
com
.
wecloud
.
multimeet
.
service
;
import
com.wecloud.im.param.InviteToMultiMeetParam
;
import
com.wecloud.im.param.RejectToMultiMeetParam
;
import
com.wecloud.im.param.rtc.CreateRtcChannelResult
;
import
com.wecloud.im.param.rtc.RejectRtcChannelParam
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
/**
* @Author wenzhida
* @Date 2022/3/7 18:26
* @Description 多人音视频服务接口
*/
public
interface
MultiMeetService
{
/**
* 发起多人音视频邀请
* @param param
* @return
*/
void
invite
(
InviteToMultiMeetParam
param
);
/**
* 拒接加入会议
* @param param
*/
void
reject
(
RejectToMultiMeetParam
param
);
}
core/src/main/java/com/wecloud/multimeet/service/WsMultiMeetWrite.java
0 → 100644
View file @
95d4132a
package
com
.
wecloud
.
multimeet
.
service
;
import
com.wecloud.multimeet.entity.response.MultiMeetInviteResponse
;
import
com.wecloud.multimeet.entity.response.MultiMeetRejectResponse
;
/**
* @Author wenzhida
* @Date 2022/3/7 21:47
* @Description 多人音视频 webSocket下发指令数据
*/
public
interface
WsMultiMeetWrite
{
/**
* 发送邀请
* @param multiMeetInviteResponse
* @param toClientId
*/
void
invite
(
MultiMeetInviteResponse
multiMeetInviteResponse
,
Long
toClientId
);
/**
* 拒接邀请
* @param multiMeetRejectResponse
* @param toClientId
*/
void
reject
(
MultiMeetRejectResponse
multiMeetRejectResponse
,
Long
toClientId
);
}
core/src/main/java/com/wecloud/multimeet/service/impl/MultiMeetServiceImpl.java
0 → 100644
View file @
95d4132a
package
com
.
wecloud
.
multimeet
.
service
.
impl
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.param.InviteToMultiMeetParam
;
import
com.wecloud.im.param.RejectToMultiMeetParam
;
import
com.wecloud.im.param.rtc.CreateRtcChannelResult
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.ws.cache.UserStateCacheManager
;
import
com.wecloud.multimeet.entity.response.MultiMeetInviteResponse
;
import
com.wecloud.multimeet.entity.response.MultiMeetRejectResponse
;
import
com.wecloud.multimeet.service.MultiMeetService
;
import
com.wecloud.multimeet.service.WsMultiMeetWrite
;
import
com.wecloud.utils.SnowflakeUtil
;
import
io.geekidea.springbootplus.framework.common.exception.BusinessException
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* @Author wenzhida
* @Date 2022/3/7 18:43
* @Description 多人音视频接口实现
*/
@Slf4j
@Service
public
class
MultiMeetServiceImpl
implements
MultiMeetService
{
@Autowired
private
WsMultiMeetWrite
wsMultiMeetWrite
;
@Autowired
private
ImClientService
imClientService
;
@Autowired
private
UserStateCacheManager
userStateCacheManager
;
@Override
public
void
invite
(
InviteToMultiMeetParam
param
)
{
ImClient
currentClient
=
imClientService
.
getCurrentClient
();
// 判断发起方必须在线
boolean
onlineStatus
=
userStateCacheManager
.
isOnline
(
currentClient
.
getId
());
if
(!
onlineStatus
)
{
log
.
info
(
"发起方必须在线"
+
currentClient
.
getFkAppid
()
+
currentClient
.
getClientId
());
throw
new
BusinessException
(
"发起方必须在线"
);
}
for
(
String
toClient
:
param
.
getToClients
())
{
ImClient
receiver
=
imClientService
.
getCacheImClient
(
currentClient
.
getFkAppid
(),
toClient
);
if
(
receiver
==
null
)
{
log
.
info
(
"查无接收人信息 {}"
,
toClient
);
continue
;
}
// ws向接收方发送通知
MultiMeetInviteResponse
multiMeetInviteResponse
=
new
MultiMeetInviteResponse
();
multiMeetInviteResponse
.
setConversationId
(
param
.
getConversationId
());
multiMeetInviteResponse
.
setClientId
(
currentClient
.
getClientId
());
multiMeetInviteResponse
.
setTimestamp
(
System
.
currentTimeMillis
());
wsMultiMeetWrite
.
invite
(
multiMeetInviteResponse
,
receiver
.
getId
());
// TODO 待开发 下发安卓和ios系统推送
}
}
@Override
public
void
reject
(
RejectToMultiMeetParam
param
)
{
ImClient
currentClient
=
imClientService
.
getCurrentClient
();
// ws向接收方发送通知
MultiMeetRejectResponse
multiMeetRejectResponse
=
new
MultiMeetRejectResponse
();
multiMeetRejectResponse
.
setClientId
(
currentClient
.
getClientId
());
multiMeetRejectResponse
.
setTimestamp
(
System
.
currentTimeMillis
());
wsMultiMeetWrite
.
reject
(
multiMeetRejectResponse
,
currentClient
.
getId
());
}
}
core/src/main/java/com/wecloud/multimeet/service/impl/WsMultiMeetWriteImpl.java
0 → 100644
View file @
95d4132a
package
com
.
wecloud
.
multimeet
.
service
.
impl
;
import
com.wecloud.im.ws.enums.WsMultiMeetResponseSubCmdEnum
;
import
com.wecloud.im.ws.enums.WsResponseCmdEnum
;
import
com.wecloud.im.ws.model.WsResponse
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.multimeet.entity.response.MultiMeetInviteResponse
;
import
com.wecloud.multimeet.entity.response.MultiMeetRejectResponse
;
import
com.wecloud.multimeet.service.WsMultiMeetWrite
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* @Author wenzhida
* @Date 2022/3/7 22:26
* @Description 多人音视频长连接下发
*/
@Service
public
class
WsMultiMeetWriteImpl
implements
WsMultiMeetWrite
{
@Autowired
private
ChannelSender
channelSender
;
@Override
public
void
invite
(
MultiMeetInviteResponse
multiMeetInviteResponse
,
Long
toClientId
)
{
multiMeetInviteResponse
.
setSubCmd
(
WsMultiMeetResponseSubCmdEnum
.
INVITE
.
getCmdCode
());
// 向接收方推送
WsResponse
<
MultiMeetInviteResponse
>
responseModel
=
new
WsResponse
<>();
responseModel
.
setCmd
(
WsResponseCmdEnum
.
MULTI_MEET_MSG
.
getCmdCode
());
ApiResult
<
Boolean
>
result
=
ApiResult
.
result
(
ApiCode
.
SUCCESS
);
responseModel
.
setCode
(
result
.
getCode
());
responseModel
.
setMsg
(
result
.
getMessage
());
responseModel
.
setData
(
multiMeetInviteResponse
);
responseModel
.
setReqId
(
null
);
channelSender
.
sendMsg
(
responseModel
,
toClientId
);
}
@Override
public
void
reject
(
MultiMeetRejectResponse
multiMeetRejectResponse
,
Long
toClientId
)
{
multiMeetRejectResponse
.
setSubCmd
(
WsMultiMeetResponseSubCmdEnum
.
REJECT
.
getCmdCode
());
// 向接收方推送
WsResponse
<
MultiMeetRejectResponse
>
responseModel
=
new
WsResponse
<>();
responseModel
.
setCmd
(
WsResponseCmdEnum
.
MULTI_MEET_MSG
.
getCmdCode
());
ApiResult
<
Boolean
>
result
=
ApiResult
.
result
(
ApiCode
.
SUCCESS
);
responseModel
.
setCode
(
result
.
getCode
());
responseModel
.
setMsg
(
result
.
getMessage
());
responseModel
.
setData
(
multiMeetRejectResponse
);
responseModel
.
setReqId
(
null
);
channelSender
.
sendMsg
(
responseModel
,
toClientId
);
}
}
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