Room({ - @Deprecated('deprecated, please use connectOptions in room.connect()') ConnectOptions connectOptions = const ConnectOptions(),
- RoomOptions roomOptions = const RoomOptions(),
- 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();
});
}