answerCall method

dynamic answerCall({
  1. CallType? callType,
  2. String? caller,
  3. RTCVideoRenderer? localRenderer,
  4. RTCVideoRenderer? remoteRenderer,
})

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);
  }
}