Commit 0d15086b by Future

多人音视频新增接口

parent 17a61960
......@@ -85,4 +85,11 @@ public class MultiMeetAction {
multiMeetService.heartbeat(data);
return WsResponse.ok();
}
@ActionMapping("/isBeCalling")
@ApiOperation(value = "是否正在被呼叫", notes = "是否正在被呼叫")
public WsResponse<Map<String, Boolean>> isBeCalling() {
multiMeetService.isBeCalling();
return WsResponse.ok();
}
}
......@@ -89,5 +89,12 @@ public class ImMultiMeetController extends BaseController {
return ApiResult.ok();
}
@PostMapping("/isBeCalling")
@ApiOperation(value = "是否正在被呼叫", notes = "是否正在被呼叫")
public ApiResult<Boolean> isBeCalling() {
multiMeetService.isBeCalling();
return ApiResult.ok();
}
}
......@@ -52,6 +52,11 @@ public interface MultiMeetService {
void heartbeat(HeartbeatMultiMeetParam param);
/**
* 是否正在被呼叫
*/
void isBeCalling();
/**
* 呼叫超时逻辑处理
*/
void callingTimeout();
......
......@@ -249,6 +249,13 @@ public class MultiMeetServiceImpl implements MultiMeetService {
.in(ImMultiRtcRoomMember::getState, Lists.newArrayList(MultiRtcMemberStateEnum.ANSWERED.getCode(), MultiRtcMemberStateEnum.CALLING.getCode()))
.ne(ImMultiRtcRoomMember::getClientId, currentClient.getClientId())
);
if (CollectionUtils.isEmpty(rtcRoomMemberList)) {
// 房间中无已接听人员,将呼叫中的成员置为“未接听”
imMultiRtcRoomMemberService.update(new UpdateWrapper<ImMultiRtcRoomMember>().lambda()
.eq(ImMultiRtcRoomMember::getRoomId, param.getRoomId())
.eq(ImMultiRtcRoomMember::getState, MultiRtcMemberStateEnum.CALLING.getCode())
.set(ImMultiRtcRoomMember::getState, MultiRtcMemberStateEnum.NOT_ANSWERED.getCode()));
}
for (ImMultiRtcRoomMember imMultiRtcRoomMember : rtcRoomMemberList) {
// ws向接收方发送通知
MultiMeetLeaveResponse multiMeetLeaveResponse = new MultiMeetLeaveResponse();
......@@ -282,6 +289,44 @@ public class MultiMeetServiceImpl implements MultiMeetService {
}
@Override
public void isBeCalling() {
ImClient currentClient = imClientService.getCurrentClient();
// 查询当前用户是否被呼叫
List<ImMultiRtcRoomMember> roomMembers = imMultiRtcRoomMemberService.list(
new QueryWrapper<ImMultiRtcRoomMember>().lambda()
.lt(ImMultiRtcRoomMember::getClientId, currentClient.getClientId())
.eq(ImMultiRtcRoomMember::getState, MultiRtcMemberStateEnum.CALLING.getCode()));
if (CollectionUtils.isNotEmpty(roomMembers)) {
ImMultiRtcRoom room = imMultiRtcRoomService.getCachedMultiRtcRoom(currentClient.getFkAppid(), roomMembers.get(0).getRoomId());
if (room == null) {
return;
}
List<ImMultiRtcRoomMember> answeredMembers = imMultiRtcRoomMemberService.list(
new QueryWrapper<ImMultiRtcRoomMember>().lambda()
.lt(ImMultiRtcRoomMember::getClientId, currentClient.getClientId())
.in(ImMultiRtcRoomMember::getState, Lists.newArrayList(MultiRtcMemberStateEnum.ANSWERED.getCode(), MultiRtcMemberStateEnum.ANSWERED.getCode())));
List<RoomMemberDto> members = Lists.newArrayList();
if (CollectionUtils.isNotEmpty(answeredMembers)) {
for (ImMultiRtcRoomMember answeredMember : answeredMembers) {
RoomMemberDto memberDto = new RoomMemberDto();
memberDto.setFkClientId(answeredMember.getFkClientId());
memberDto.setClientId(answeredMember.getClientId());
memberDto.setState(answeredMember.getState());
members.add(memberDto);
}
}
// ws向接收方发送通知
MultiMeetInviteResponse multiMeetInviteResponse = new MultiMeetInviteResponse();
multiMeetInviteResponse.setRoomId(roomMembers.get(0).getRoomId());
multiMeetInviteResponse.setClientId(currentClient.getClientId());
multiMeetInviteResponse.setTimestamp(System.currentTimeMillis());
multiMeetInviteResponse.setMemberDtoList(members);
wsMultiMeetWrite.invite(multiMeetInviteResponse, roomMembers.get(0).getFkClientId());
}
}
@Override
public void callingTimeout() {
// 60 秒之前的时间
Date beforeTime = DateUtils.addSeconds(new Date(), -60);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment