answerCall method
dynamic
answerCall({})
Implementation
answerCall(
{CallType? callType,
String? caller,
RTCVideoRenderer? localRenderer,
RTCVideoRenderer? remoteRenderer}) async {
Completer completer = Completer();
localRenderer?.initialize();
remoteRenderer?.initialize();
try {
if (_state != CallState.sessionState) {
completer.completeError({
'error': 'The state that cannot make an answer call, state $_state'
});
return;
}
if (_userId == null) {
completer.completeError({'error': "Invalid caller : $_userId"});
}
if (callType == CallType.unknown) {
completer.completeError({'error': "Invalid parameter $callType"});
return;
}
if (callType == CallType.videocall && localRenderer == null) {
completer.completeError({'error': "Need local renderer for videocall"});
return;
}
if ((caller != null && caller.length > 128)) {
completer.completeError({'error': 'Invalid caller'});
return;
}
if ((caller != null && caller.isEmpty)) {
completer.completeError({'error': 'Invalid caller'});
return;
}
if(caller == _userId) {
completer.completeError({'error': 'Cannot answer call to yourself'});
return;
}
_remoteRenderer = remoteRenderer ?? RTCVideoRenderer();
String sdkCaller = '';
String sdkCallType = '';
if (callType != null && caller != null) {
sdkCaller = caller;
sdkCallType = callType.value;
} else if (_callInfo != null) {
sdkCallType = _callInfo?['call_type'];
sdkCaller = _callInfo?['caller'];
}
if (_callInfo != null &&
(_callInfo?['room_type'] != RoomType.audiocall.value &&
_callInfo?["room_type"] != RoomType.videocall.value &&
_callInfo?['room_type'] != RoomType.sipcall.value)) {
completer.completeError(
{'error': "Not supported room type ${_callInfo?['room_type']}"});
}
var callResult =
await _ws.requestAnswerCall(sdkCallType, sdkCaller, _userId!);
await joinRoom(roomId: callResult['room_id']);
if (sdkCallType == CallType.videocall.value) {
_videoPublisher?.publish(localRenderer!);
}
completer.complete();
return completer.future;
} catch (error) {
completer.completeError(error);
}
}