Commit ce1ca6af by Future

多人音视频会议增加进入会议与离开会议事件下发

parent a2a8c2c6
package com.wecloud.im.controller;
import com.alibaba.fastjson.JSON;
import com.wecloud.im.param.AgreeToMultiMeetParam;
import com.wecloud.im.param.InviteToMultiMeetParam;
import com.wecloud.im.param.LeaveFromMultiMeetParam;
import com.wecloud.im.param.RejectToMultiMeetParam;
import com.wecloud.im.param.rtc.JoinRtcChannelParam;
import com.wecloud.im.param.rtc.LeaveRtcChannelParam;
import com.wecloud.im.param.rtc.RejectRtcChannelParam;
import com.wecloud.multimeet.service.MultiMeetService;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
......@@ -55,6 +59,19 @@ public class ImMultiMeetController extends BaseController {
return ApiResult.ok();
}
@PostMapping("/agree")
@ApiOperation(value = "同意进入会议", notes = "同意进入会议")
public ApiResult<Boolean> agree(@RequestBody AgreeToMultiMeetParam param) {
multiMeetService.agree(param);
return ApiResult.ok();
}
@PostMapping("/leave")
@ApiOperation(value = "主动挂断(离开会议)", notes = "主动挂断(离开会议)")
public ApiResult<Boolean> leave(@RequestBody LeaveFromMultiMeetParam param) {
multiMeetService.leave(param);
return ApiResult.ok();
}
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @Author wenzhida
* @Date 2022/3/7 22:18
* @Description 同意加入会议
*/
@Data
@ApiModel(value = "同意加入会议")
public class AgreeToMultiMeetParam implements Serializable {
private static final long serialVersionUID = -5450997250608231171L;
@ApiModelProperty(value = "会话id,可选", required = false)
private Long conversationId;
@ApiModelProperty(value = "多人会议房间id", required = true)
private String roomId;
@ApiModelProperty(value = "发起会议人clientId", required = true)
private String inviterClientId;
}
......@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
......@@ -22,9 +23,11 @@ public class InviteToMultiMeetParam implements Serializable {
@ApiModelProperty(value = "绑定的会话id,可选", required = false)
private Long conversationId;
@NotNull(message = "多人会议房间id不可为空")
@ApiModelProperty(value = "多人会议房间id", required = true)
private String roomId;
@NotNull(message = "被邀请的客户端ID列表不可为空")
@ApiModelProperty(value = "被邀请的客户端ID列表", required = true)
private List<String> toClients;
......
package com.wecloud.im.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @Author wenzhida
* @Date 2022/3/7 22:18
* @Description 离开会议
*/
@Data
@ApiModel(value = "离开会议")
public class LeaveFromMultiMeetParam implements Serializable {
private static final long serialVersionUID = 5395668355528734094L;
@ApiModelProperty(value = "会话id,可选", required = false)
private Long conversationId;
@ApiModelProperty(value = "多人会议房间id", required = true)
private String roomId;
@ApiModelProperty(value = "发起会议人clientId", required = true)
private String inviterClientId;
}
......@@ -15,7 +15,17 @@ public enum WsMultiMeetResponseSubCmdEnum {
/**
* 拒接邀请
*/
REJECT(2);
REJECT(2),
/**
* 同意进入
*/
AGREE(3),
/**
* 主动离开
*/
LEAVE(4);
private final int cmdCode;
......
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 MultiMeetAgreeResponse extends MultiMeetDataBase implements Serializable {
private static final long serialVersionUID = 1623214002231302888L;
/**
* 会话id
*/
private Long conversationId;
/**
* 房间id
*/
private String roomId;
/**
* 发起会议人clientId
*/
private String inviterClientId;
}
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 MultiMeetLeaveResponse extends MultiMeetDataBase implements Serializable {
private static final long serialVersionUID = 734428267643207411L;
/**
* 会话id
*/
private Long conversationId;
/**
* 房间id
*/
private String roomId;
/**
* 发起会议人clientId
*/
private String inviterClientId;
}
package com.wecloud.multimeet.service;
import com.wecloud.im.param.AgreeToMultiMeetParam;
import com.wecloud.im.param.InviteToMultiMeetParam;
import com.wecloud.im.param.LeaveFromMultiMeetParam;
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
......@@ -26,4 +25,16 @@ public interface MultiMeetService {
*/
void reject(RejectToMultiMeetParam param);
/**
* 同意进入会议
* @param param
*/
void agree(AgreeToMultiMeetParam param);
/**
* 同意进入会议
* @param param
*/
void leave(LeaveFromMultiMeetParam param);
}
package com.wecloud.multimeet.service;
import com.wecloud.multimeet.entity.response.MultiMeetAgreeResponse;
import com.wecloud.multimeet.entity.response.MultiMeetInviteResponse;
import com.wecloud.multimeet.entity.response.MultiMeetLeaveResponse;
import com.wecloud.multimeet.entity.response.MultiMeetRejectResponse;
/**
......@@ -24,4 +26,18 @@ public interface WsMultiMeetWrite {
*/
void reject(MultiMeetRejectResponse multiMeetRejectResponse, Long toFkClientId);
/**
* 同意进入会议
* @param multiMeetAgreeResponse
* @param toFkClientId
*/
void agree(MultiMeetAgreeResponse multiMeetAgreeResponse, Long toFkClientId);
/**
* 主动离开会议
* @param multiMeetLeaveResponse
* @param toFkClientId
*/
void leave(MultiMeetLeaveResponse multiMeetLeaveResponse, Long toFkClientId);
}
package com.wecloud.multimeet.service.impl;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.param.AgreeToMultiMeetParam;
import com.wecloud.im.param.InviteToMultiMeetParam;
import com.wecloud.im.param.LeaveFromMultiMeetParam;
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.MultiMeetAgreeResponse;
import com.wecloud.multimeet.entity.response.MultiMeetInviteResponse;
import com.wecloud.multimeet.entity.response.MultiMeetLeaveResponse;
import com.wecloud.multimeet.entity.response.MultiMeetRejectResponse;
import com.wecloud.multimeet.service.MultiMeetService;
import com.wecloud.multimeet.service.WsMultiMeetWrite;
......@@ -80,4 +84,41 @@ public class MultiMeetServiceImpl implements MultiMeetService {
wsMultiMeetWrite.reject(multiMeetRejectResponse, receiver.getId());
}
@Override
public void agree(AgreeToMultiMeetParam param) {
ImClient currentClient = imClientService.getCurrentClient();
// ws向接收方发送通知
MultiMeetAgreeResponse multiMeetAgreeResponse = new MultiMeetAgreeResponse();
multiMeetAgreeResponse.setConversationId(param.getConversationId());
multiMeetAgreeResponse.setRoomId(param.getRoomId());
multiMeetAgreeResponse.setClientId(currentClient.getClientId());
multiMeetAgreeResponse.setTimestamp(System.currentTimeMillis());
ImClient receiver = imClientService.getCacheImClient(currentClient.getFkAppid(), param.getInviterClientId());
if (receiver == null) {
log.info("查无接收人信息 {}", param.getInviterClientId());
throw new BusinessException("查无发起会议人信息");
}
wsMultiMeetWrite.agree(multiMeetAgreeResponse, receiver.getId());
}
@Override
public void leave(LeaveFromMultiMeetParam param) {
ImClient currentClient = imClientService.getCurrentClient();
// ws向接收方发送通知
MultiMeetLeaveResponse multiMeetLeaveResponse = new MultiMeetLeaveResponse();
multiMeetLeaveResponse.setConversationId(param.getConversationId());
multiMeetLeaveResponse.setRoomId(param.getRoomId());
multiMeetLeaveResponse.setClientId(currentClient.getClientId());
multiMeetLeaveResponse.setTimestamp(System.currentTimeMillis());
ImClient receiver = imClientService.getCacheImClient(currentClient.getFkAppid(), param.getInviterClientId());
if (receiver == null) {
log.info("查无接收人信息 {}", param.getInviterClientId());
throw new BusinessException("查无发起会议人信息");
}
wsMultiMeetWrite.leave(multiMeetLeaveResponse, receiver.getId());
}
}
......@@ -4,7 +4,9 @@ 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.MultiMeetAgreeResponse;
import com.wecloud.multimeet.entity.response.MultiMeetInviteResponse;
import com.wecloud.multimeet.entity.response.MultiMeetLeaveResponse;
import com.wecloud.multimeet.entity.response.MultiMeetRejectResponse;
import com.wecloud.multimeet.service.WsMultiMeetWrite;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
......@@ -53,5 +55,37 @@ public class WsMultiMeetWriteImpl implements WsMultiMeetWrite {
channelSender.sendMsg(responseModel, toFkClientId);
}
@Override
public void agree(MultiMeetAgreeResponse multiMeetAgreeResponse, Long toFkClientId) {
multiMeetAgreeResponse.setSubCmd(WsMultiMeetResponseSubCmdEnum.AGREE.getCmdCode());
// 向接收方推送
WsResponse<MultiMeetAgreeResponse> 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(multiMeetAgreeResponse);
responseModel.setReqId(null);
channelSender.sendMsg(responseModel, toFkClientId);
}
@Override
public void leave(MultiMeetLeaveResponse multiMeetLeaveResponse, Long toFkClientId) {
multiMeetLeaveResponse.setSubCmd(WsMultiMeetResponseSubCmdEnum.LEAVE.getCmdCode());
// 向接收方推送
WsResponse<MultiMeetLeaveResponse> 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(multiMeetLeaveResponse);
responseModel.setReqId(null);
channelSender.sendMsg(responseModel, toFkClientId);
}
}
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