createSession method

dynamic createSession({
  1. String? userId,
})

Implementation

createSession({String? userId}) async {
  Completer completer = Completer();
  try {
    if (serviceId == null ||
        serviceKey == null ||
        serviceId == '' ||
        serviceKey == '') {
      completer.completeError('Invalid service id or service key');
    }
    if (_state != CallState.nullState) {
      completer.completeError('Already session created');
    }

    if (userId != null && userId.length > 64) {
      completer.completeError('Too long user id : $userId');
    }

    if (userId != null && userId.isEmpty) {
      completer.completeError('Invalid user id : $userId');
    }

    _state = CallState.sessionState;

    await _ws.connect();

    var createSessionResult =
        await _ws.requestCreateSession(serviceId, serviceKey, userId);

    _session = createSessionResult['session'];
    _userId = createSessionResult['user_id'];
    _turnId = createSessionResult['turn_id'];
    _turnSecret = createSessionResult['turn_secret'];

    if (_ws.channel?.closeCode != null) {
      completer.completeError('error: Invalid websocket connection state');
    }
    _audioPublisher = AudioPublisher(_ws, _session, _turnId, _turnSecret);
    await _audioPublisher?.pcInitializer();
    _videoPublisher = VideoPublisher(_ws, _session, _turnId, _turnSecret);
    await _videoPublisher?.pcInitializer();

    var userResult = IResponseCreateSession(createSessionResult).toMap();
    completer.complete(userResult);
    return completer.future;
  } catch (error) {
    freeResources();
    completer.completeError(error);
  }
}