@@ -73,6 +73,8 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
7373 final Engine engine;
7474 // suppport for multiple event listeners
7575 late final EventsListener <EngineEvent > _engineListener;
76+ //
77+ late final EventsListener <SignalEvent > _signalListener;
7678
7779 Room ({
7880 ConnectOptions ? connectOptions,
@@ -82,7 +84,10 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
8284 _roomOptions = roomOptions,
8385 engine = engine ?? Engine () {
8486 _engineListener = this .engine.createListener ();
85- _setUpListeners ();
87+ _setUpEngineListeners ();
88+
89+ _signalListener = this .engine.signalClient.createListener ();
90+ _setUpSignalListeners ();
8691
8792 // Any event emitted will trigger ChangeNotifier
8893 events.listen ((event) {
@@ -97,7 +102,9 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
97102 await events.dispose ();
98103 // dispose local participant
99104 await localParticipant? .dispose ();
100- // dispose all listeners for RTCEngine
105+ // dispose all listeners for SignalClient
106+ await _signalListener.dispose ();
107+ // dispose all listeners for Engine
101108 await _engineListener.dispose ();
102109 // dispose the engine
103110 await this .engine.dispose ();
@@ -117,27 +124,7 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
117124 return engine.connect (url, token, this .connectOptions);
118125 }
119126
120- void _setUpListeners () => _engineListener
121- ..on < EngineConnectionStateUpdatedEvent > ((event) async {
122- if (event.didReconnect) {
123- events.emit (const RoomReconnectedEvent ());
124- await _handlePostReconnect (false );
125- } else if (event.newState == ConnectionState .reconnecting) {
126- events.emit (const RoomReconnectingEvent ());
127- } else if (event.newState == ConnectionState .disconnected) {
128- await _cleanUp ();
129- events.emit (const RoomDisconnectedEvent ());
130- }
131- // always notify ChangeNotifier
132- notifyListeners ();
133- })
134- ..on < SignalConnectionStateUpdatedEvent > ((event) {
135- // during reconnection, need to send sync state upon signal connection.
136- if (event.didReconnect) {
137- logger.fine ('Sending syncState' );
138- _sendSyncState ();
139- }
140- })
127+ void _setUpSignalListeners () => _signalListener
141128 ..on < SignalJoinResponseEvent > ((event) {
142129 _sid = event.response.room.sid;
143130 _name = event.response.room.name;
@@ -163,23 +150,12 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
163150 })
164151 ..on < SignalParticipantUpdateEvent > (
165152 (event) => _onParticipantUpdateEvent (event.participants))
166- ..on < EngineActiveSpeakersUpdateEvent > (
167- (event) => _onEngineActiveSpeakersUpdateEvent (event.speakers))
168153 ..on < SignalSpeakersChangedEvent > (
169154 (event) => _onSignalSpeakersChangedEvent (event.speakers))
170155 ..on < SignalConnectionQualityUpdateEvent > (
171156 (event) => _onSignalConnectionQualityUpdateEvent (event.updates))
172157 ..on < SignalStreamStateUpdatedEvent > (
173158 (event) => _onSignalStreamStateUpdateEvent (event.updates))
174- ..on < EngineDataPacketReceivedEvent > (_onDataMessageEvent)
175- ..on < EngineRemoteMuteChangedEvent > ((event) async {
176- final publication = localParticipant? .trackPublications[event.sid];
177- if (event.muted) {
178- await publication? .mute ();
179- } else {
180- await publication? .unmute ();
181- }
182- })
183159 ..on < SignalSubscribedQualityUpdatedEvent > ((event) {
184160 // Signal for Dynacast
185161 final options = roomOptions ?? const RoomOptions ();
@@ -221,6 +197,39 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
221197 _metadata = event.room.metadata;
222198 events.emit (RoomMetadataChangedEvent (metadata: event.room.metadata));
223199 })
200+ ..on < SignalConnectionStateUpdatedEvent > ((event) {
201+ // during reconnection, need to send sync state upon signal connection.
202+ if (event.didReconnect) {
203+ logger.fine ('Sending syncState' );
204+ _sendSyncState ();
205+ }
206+ })
207+ ..on < SignalRemoteMuteTrackEvent > ((event) async {
208+ final publication = localParticipant? .trackPublications[event.sid];
209+ if (event.muted) {
210+ await publication? .mute ();
211+ } else {
212+ await publication? .unmute ();
213+ }
214+ });
215+
216+ void _setUpEngineListeners () => _engineListener
217+ ..on < EngineConnectionStateUpdatedEvent > ((event) async {
218+ if (event.didReconnect) {
219+ events.emit (const RoomReconnectedEvent ());
220+ await _handlePostReconnect (false );
221+ } else if (event.newState == ConnectionState .reconnecting) {
222+ events.emit (const RoomReconnectingEvent ());
223+ } else if (event.newState == ConnectionState .disconnected) {
224+ await _cleanUp ();
225+ events.emit (const RoomDisconnectedEvent ());
226+ }
227+ // always notify ChangeNotifier
228+ notifyListeners ();
229+ })
230+ ..on < EngineActiveSpeakersUpdateEvent > (
231+ (event) => _onEngineActiveSpeakersUpdateEvent (event.speakers))
232+ ..on < EngineDataPacketReceivedEvent > (_onDataMessageEvent)
224233 ..on < EngineTrackAddedEvent > ((event) async {
225234 logger.fine ('EngineTrackAddedEvent trackSid:${event .track .id }' );
226235
0 commit comments