offerCall method
dynamic
offerCall({})
Implementation
offerCall(
{required CallType callType,
required String callee,
RTCVideoRenderer? localRenderer,
RTCVideoRenderer? remoteRenderer}) async {
Completer completer = Completer();
if (remoteRenderer != null) {
_remoteRenderer = remoteRenderer;
await _remoteRenderer.initialize();
}
try {
if (_state != CallState.sessionState) {
completer.completeError({
'error': 'The state that cannot make an offer call, state $_state'
});
return;
}
if (_userId == null) {
completer.completeError({'error': "Invalid user id that cannot make an offer call : $_userId"});
}
if (callee.length > 128 || callee.isEmpty) {
completer.completeError({'error': 'Invalid callee'});
return;
}
if (callee == _userId) {
completer.completeError({'error': 'Cannot offer call to yourself'});
return;
}
if (callType == CallType.unknown) {
completer.completeError({'error': 'Invalid call type'});
return;
}
if (callType == CallType.videocall &&
(localRenderer == null || remoteRenderer == null)) {
completer.completeError(
{'error': 'Invalid parameter. Video call type needs renderers'});
return;
}
var offerCallResult = await _ws.requestOfferCall(
callType, _userId!, callee, false);
if (offerCallResult['room_id'] != null) {
_roomId = offerCallResult['room_id'];
} else {
RoomType roomType;
switch (callType) {
case CallType.audiocall:
roomType = RoomType.audiocall;
break;
case CallType.videocall:
roomType = RoomType.videocall;
break;
case CallType.sipcall:
roomType = RoomType.sipcall;
break;
default:
roomType = RoomType.audiocall;
}
var createRoomResult = await createRoom(roomType: roomType);
_roomId = createRoomResult['room_id'];
}
await joinRoom(roomId: _roomId!);
if (callType == CallType.videocall) {
await _videoPublisher?.publish(localRenderer!);
_videoPublishFlag = true;
}
var userResult = IResponseOfferCall(offerCallResult).toMap();
completer.complete(userResult);
return completer.future;
} catch (error) {
completer.completeError(error);
}
}