signalingListener method
V2TimSignalingListener
signalingListener()
Implementation
V2TimSignalingListener signalingListener() {
TRTCCallingDelegate type;
return V2TimSignalingListener(
onInvitationCancelled: (inviteID, inviter, data) {
if (!_isCallingData(data)) {
return;
}
if (inviteID == mCurCallID) {
_stopCall();
emitEvent(TRTCCallingDelegate.onCallingCancel, {});
}
},
onInvitationTimeout: (inviteID, inviteeList) {
//邀请者
String curGroupCallId = _getGroupCallId(mCurUserId);
if (!_isEmpty(mCurCallID) && inviteID != mCurCallID) {
return;
} else if (_isEmpty(mCurCallID) && inviteID != curGroupCallId) {
return;
}
isOnInvitation = false;
if (mCurSponsorForMe.isEmpty) {
for (var i = 0; i < inviteeList.length; i++) {
emitEvent(TRTCCallingDelegate.onNoResp, inviteeList[i]);
mCurInvitedList.remove(inviteeList[i]);
}
} else {
//被邀请者
if (inviteeList.contains(mCurUserId)) {
_stopCall();
emitEvent(TRTCCallingDelegate.onCallingTimeout, []);
} else {
emitEvent(TRTCCallingDelegate.onCallingTimeout, inviteeList);
}
// ignore: list_remove_unrelated_type
mCurInvitedList.remove(inviteeList);
}
// 每次超时都需要判断当前是否需要结束通话
_preExitRoom(null);
},
onInviteeAccepted: (inviteID, invitee, data) {
if (!_isCallingData(data)) {
return;
}
mCurInvitedList.remove(invitee);
emitEvent(TRTCCallingDelegate.onAccept,invitee);
},
onInviteeRejected: (inviteID, invitee, data) {
if (!_isCallingData(data)) {
return;
}
String curGroupCallId = _getGroupCallId(invitee);
if (mCurCallID == inviteID || curGroupCallId == inviteID) {
try {
Map<String, dynamic>? customMap = _callingDataAdapt(data);
mCurInvitedList.remove(invitee);
if (customMap != null &&
(customMap.containsKey('message') ||
customMap.containsKey("line_busy"))) {
final message = customMap["line_busy"] ?? customMap["message"];
if (message == "lineBusy") {
emitEvent(TRTCCallingDelegate.onLineBusy, invitee);
}
} else {
emitEvent(TRTCCallingDelegate.onReject, invitee);
}
_preExitRoom(null);
} catch (e) {
print(logTag +
"=onInviteeRejected JsonSyntaxException:" +
e.toString());
}
}
},
onReceiveNewInvitation:
(inviteID, inviter, groupID, inviteeList, data) async {
if (!_isCallingData(data)) {
return;
}
try {
Map<String, dynamic>? customMap = _callingDataAdapt(data);
if (customMap == null) {
print(logTag + "onReceiveNewInvitation extraMap is null, ignore");
return;
}
if (customMap.containsKey('cmd') ||
customMap.containsKey("call_type")) {
if (customMap.containsKey('cmd')) {
mCurCallType = customMap['cmd'];
} else {
mCurCallType = customMap["call_type"] == 1
? TRTCCalling.typeAudioCall
: TRTCCalling.typeVideoCall;
}
}
if (customMap.containsKey('call_end')) {
_preExitRoom(null);
return;
}
if (customMap.containsKey('room_id')) {
mCurRoomID = customMap['room_id'];
}
} catch (e) {
print(logTag +
"=onReceiveNewInvitation JsonSyntaxException:" +
e.toString());
}
if (isOnInvitation || (isOnCalling && inviteeList.contains(mCurUserId))) {
// 正在通话时,收到了一个邀请我的通话请求,需要告诉对方忙线
Map<String, dynamic> busyMap = getCustomMap();
// message为native那边的额外业务字段
busyMap["data"]['message'] = 'lineBusy';
busyMap["line_busy"] = 'lineBusy';
await timManager
.getSignalingManager()
.reject(inviteID: inviteID, data: jsonEncode(busyMap));
return;
}
// 与对方处在同一个群中,此时收到了邀请群中其他人通话的请求,界面上展示连接动画
if (!_isEmpty(groupID) && !_isEmpty(mCurGroupId)) {
mCurInvitedList.addAll(inviteeList);
TRTCCallingDelegate type =
TRTCCallingDelegate.onGroupCallInviteeListUpdate;
emitEvent(type, mCurInvitedList);
}
if (!inviteeList.contains(mCurUserId)) {
return;
}
isOnInvitation = true;
mCurSponsorForMe = inviter;
mCurCallID = inviteID;
mCurGroupId = groupID;
type = TRTCCallingDelegate.onInvited;
inviteeList.remove(mCurUserId);
emitEvent(type, {
'sponsor': inviter,
'userIds': inviteeList,
'isFromGroup': !_isEmpty(groupID),
'type': mCurCallType,
'groupID': groupID
});
},
);
}