import 'package:flutter/services.dart'; import '../../flutter_openim_sdk.dart'; class SignalingManager { MethodChannel _channel; late OnSignalingListener listener; SignalingManager(this._channel); /// 信令监听 Future setSignalingListener(OnSignalingListener listener) { this.listener = listener; return _channel.invokeMethod('setSignalingListener', _buildParam({})); } /// 邀请个人加入音视频 /// [info] 信令对象[SignalingInfo] Future signalingInvite({ required SignalingInfo info, String? operationID, }) => _channel .invokeMethod( 'signalingInvite', _buildParam({ 'signalingInfo': info.toJson(), 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toObj(value, (map) => SignalingCertificate.fromJson(map))); /// 邀请群里某些人加入音视频 /// [info] 信令对象[SignalingInfo] Future signalingInviteInGroup({ required SignalingInfo info, String? operationID, }) => _channel .invokeMethod( 'signalingInviteInGroup', _buildParam({ 'signalingInfo': info.toJson(), 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toObj(value, (map) => SignalingCertificate.fromJson(map))); /// 同意某人音视频邀请 /// [info] 信令对象[SignalingInfo] Future signalingAccept({ required SignalingInfo info, String? operationID, }) => _channel .invokeMethod( 'signalingAccept', _buildParam({ 'signalingInfo': info.toJson(), 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toObj(value, (map) => SignalingCertificate.fromJson(map))); /// 拒绝某人音视频邀请 /// [info] 信令对象[SignalingInfo] Future signalingReject({ required SignalingInfo info, String? operationID, }) => _channel.invokeMethod( 'signalingReject', _buildParam({ 'signalingInfo': info.toJson(), 'operationID': Utils.checkOperationID(operationID), })); /// 邀请者取消音视频通话 /// [info] 信令对象[SignalingInfo] Future signalingCancel({ required SignalingInfo info, String? operationID, }) => _channel.invokeMethod( 'signalingCancel', _buildParam({ 'signalingInfo': info.toJson(), 'operationID': Utils.checkOperationID(operationID), })); /// 挂断 /// [info] 信令对象[SignalingInfo] Future signalingHungUp({ required SignalingInfo info, String? operationID, }) => _channel.invokeMethod( 'signalingHungUp', _buildParam({ 'signalingInfo': info.toJson(), 'operationID': Utils.checkOperationID(operationID), })); /// 获取当前群通话信息 /// [groupID] 当前群ID Future signalingGetRoomByGroupID({ required String groupID, String? operationID, }) => _channel .invokeMethod( 'signalingGetRoomByGroupID', _buildParam({ 'groupID': groupID, 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toObj(value, (map) => RoomCallingInfo.fromJson(map))); /// 获取进入房间的信息 /// [roomID] 当前房间ID Future signalingGetTokenByRoomID({ required String roomID, String? operationID, }) => _channel .invokeMethod( 'signalingGetTokenByRoomID', _buildParam({ 'roomID': roomID, 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toObj( value, (map) => SignalingCertificate.fromJson( map..addAll({'roomID': roomID})))); /// 会议设置 /// required String roomID, /// String? meetingName, /// String? ex, /// int startTime = 0, /// int endTime = 0, /// bool participantCanUnmuteSelf = true, /// bool participantCanEnableVideo = true, /// bool onlyHostInviteUser = true, /// bool onlyHostShareScreen = true, /// bool joinDisableMicrophone = true, /// bool joinDisableVideo = true, /// bool isMuteAllVideo = true, /// bool isMuteAllMicrophone = true, /// List addCanScreenUserIDList = const [], /// List reduceCanScreenUserIDList = const [], /// List addDisableMicrophoneUserIDList = const [], /// List reduceDisableMicrophoneUserIDList = const [], /// List addDisableVideoUserIDList = const [], /// List reduceDisableVideoUserIDList = const [], /// List addPinedUserIDList = const [], /// List reducePinedUserIDList = const [], /// List addBeWatchedUserIDList = const [], /// List reduceBeWatchedUserIDList = const [], Future signalingUpdateMeetingInfo({ required Map info, String? operationID, }) { if (info['meetingID'] != null) { info['roomID'] = info['meetingID']; } assert(info['roomID'] != null); return _channel.invokeMethod( 'signalingUpdateMeetingInfo', _buildParam({ 'info': info, 'operationID': Utils.checkOperationID(operationID), })); } /// 创建会议室 /// [meetingName] 会议主题 /// [meetingHostUserID] 会议主持人ID /// [startTime] 开始时间s /// [meetingDuration] 会议时长s /// [inviteeUserIDList] 被邀请人ID列表 /// [ex] 其他 Future signalingCreateMeeting({ required String meetingName, String? meetingHostUserID, int? startTime, int? meetingDuration, List inviteeUserIDList = const [], String? ex, String? operationID, }) => _channel .invokeMethod( 'signalingCreateMeeting', _buildParam({ 'info': { 'meetingName': meetingName, 'meetingHostUserID': meetingHostUserID, 'startTime': startTime, 'meetingDuration': meetingDuration, 'inviteeUserIDList': inviteeUserIDList, 'ex': ex, }, 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toObj(value, (map) => SignalingCertificate.fromJson(map))); /// 加入会议室 /// [roomID] 会议ID /// [meetingName] 会议主题 /// [participantNickname] 加入房间显示的名称 Future signalingJoinMeeting({ required String roomID, String? meetingName, String? participantNickname, String? operationID, }) => _channel .invokeMethod( 'signalingJoinMeeting', _buildParam({ 'info': { 'roomID': roomID, 'meetingName': meetingName, 'participantNickname': participantNickname, }, 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toObj(value, (map) => SignalingCertificate.fromJson(map))); /// 会议室 管理员对指定的某一个入会人员设置禁言 /// [roomID] 会议ID /// [streamType] video/audio /// [userID] 被禁言的用户ID /// [mute] true:禁言 /// [muteAll] true:video/audio 一起设置 Future signalingOperateStream({ required String roomID, String? streamType, required String userID, bool mute = false, bool muteAll = false, String? operationID, }) => _channel.invokeMethod( 'signalingOperateStream', _buildParam({ 'roomID': roomID, 'streamType': streamType, 'userID': userID, 'mute': mute, 'muteAll': muteAll, 'operationID': Utils.checkOperationID(operationID), })); /// 获取所有的未完成会议 /// [roomID] 会议ID Future signalingGetMeetings({ String? operationID, }) => _channel .invokeMethod( 'signalingGetMeetings', _buildParam({ 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toObj(value, (map) => MeetingInfoList.fromJson(map))); /// 结束会议 /// [roomID] 会议ID Future signalingCloseRoom({ required String roomID, String? operationID, }) => _channel.invokeMethod( 'signalingCloseRoom', _buildParam({ 'roomID': roomID, 'operationID': Utils.checkOperationID(operationID), })); /// 自定义信令 /// [roomID] 会议ID /// [customInfo] 自定义信令 Future signalingSendCustomSignal({ required String roomID, required String customInfo, String? operationID, }) => _channel.invokeMethod( 'signalingSendCustomSignal', _buildParam({ 'roomID': roomID, 'customInfo': customInfo, 'operationID': Utils.checkOperationID(operationID), })); Future getSignalingInvitationInfoStartApp({ String? operationID, }) => _channel .invokeMethod( 'getSignalingInvitationInfoStartApp', _buildParam({ 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toObj(value, (map) => SignalingInfo.fromJson(map))); static Map _buildParam(Map param) { param["ManagerName"] = "signalingManager"; return param; } }