subscribe method

dynamic subscribe({
  1. required String publisherSession,
  2. required RTCVideoRenderer remoteRenderer,
})

Implementation

subscribe(
    {required String publisherSession,
    required RTCVideoRenderer remoteRenderer}) async {
  Completer completer = Completer();
  remoteRenderer.initialize();
  _remoteRenderer = remoteRenderer;
  try {
    if (_ws.channel?.closeCode != null) {
      completer.completeError('error: Invalid create session result');
      // throw Error();
    }

    if (_state == CallState.nullState || _state == CallState.sessionState) {
      completer.completeError(
          {'error': 'The state that cannot subscribe, state $_state'});
      return;
    }

    if (_roomType != RoomType.videoroom.value &&
        _roomType != RoomType.webinar.value) {
      completer.completeError({
        'error': 'The room type that cannot subscribe, room type $_roomType'
      });
      return;
    }

    if (publisherSession.length > 128) {
      completer.completeError(
          {'error': 'Invalid publisher session $publisherSession'});
      return;
    }

    if (_subscribers.length > MAXUSERCNT) {
      completer
          .completeError({'error': 'Invalid request, subscribes exceeded'});
      return;
    }
    VideoSubscriber subscriber =
        VideoSubscriber(_ws, _session, _turnId, _turnSecret);
    await subscriber.pcInitializer();

    var subscribeResult =
        await _ws.requestSubscribe(publisherSession, remoteRenderer);
    _state = CallState.subscribeState;

    if (publisherSession != subscribeResult['subscribe']) {
      debugPrint('Wrong request');
    }
    await subscriber.subscribe(subscribeResult, remoteRenderer);

    _subscribers['${subscribeResult['subscribe']}'] = subscriber;
    _state =
        _videoPublishFlag ? CallState.connectState : CallState.activeState;
    var userResult = IResponseSubscribe(subscribeResult).toMap();
    completer.complete(userResult);
    return completer.future;
  } catch (error) {
    completer.completeError(error);
  }
}