Room constructor

Room({
  1. @Deprecated('deprecated, please use connectOptions in room.connect()') ConnectOptions connectOptions = const ConnectOptions(),
  2. RoomOptions roomOptions = const RoomOptions(),
  3. Engine? engine,
})

Implementation

Room({
  @Deprecated('deprecated, please use connectOptions in room.connect()')
  ConnectOptions connectOptions = const ConnectOptions(),
  RoomOptions roomOptions = const RoomOptions(),
  Engine? engine,
}) : engine = engine ??
          Engine(
            connectOptions: connectOptions,
            roomOptions: roomOptions,
          ) {
  //
  _engineListener = this.engine.createListener();
  _setUpEngineListeners();

  _signalListener = this.engine.signalClient.createListener();
  _setUpSignalListeners();

  _pendingTrackQueue = PendingTrackQueue(
    ttl: this.engine.connectOptions.timeouts.subscribe,
    emitException: (event) => events.emit(event),
  );

  // Any event emitted will trigger ChangeNotifier
  events.listen((event) {
    logger.finer('[RoomEvent] $event, will notifyListeners()');
    notifyListeners();
  });
  // Keep a connected flush as a fallback in case tracks arrive pre-connected but before metadata.
  events.on<RoomConnectedEvent>((event) => _flushPendingTracks());

  _setupRpcListeners();

  _setupDataStreamListeners();

  preConnectAudioBuffer = PreConnectAudioBuffer(this);

  onDispose(() async {
    // clean up routine
    await _cleanUp();
    // dispose preConnectAudioBuffer
    await preConnectAudioBuffer.dispose();
    // dispose events
    await events.dispose();
    // dispose local participant
    await localParticipant?.dispose();
    // dispose all listeners for SignalClient
    await _signalListener.dispose();
    // dispose all listeners for Engine
    await _engineListener.dispose();
    // dispose the engine
    await this.engine.dispose();
  });
}