Skip to content

Commit cd4a3f5

Browse files
authored
Simplify internal events (#100)
* simplify internal events * simplify
1 parent c2fe834 commit cd4a3f5

File tree

4 files changed

+56
-86
lines changed

4 files changed

+56
-86
lines changed

lib/src/core/engine.dart

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -557,16 +557,11 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
557557
// for subscriberPrimary, we negotiate when necessary (lazy)
558558
await negotiate();
559559
}
560-
561-
// Relay to Room
562-
events.emit(event);
563560
})
564561
..on<SignalConnectionStateUpdatedEvent>((event) async {
565562
if (event.newState == ConnectionState.disconnected) {
566563
await _onDisconnected(DisconnectReason.signal);
567564
}
568-
// Relay to Room
569-
events.emit(event);
570565
})
571566
..on<SignalOfferEvent>((event) async {
572567
if (subscriber == null) {
@@ -611,20 +606,6 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
611606
await publisher!.addIceCandidate(event.candidate);
612607
}
613608
})
614-
// relay to Room
615-
..on<SignalParticipantUpdateEvent>((event) => events.emit(event))
616-
// relay to Room
617-
..on<SignalSpeakersChangedEvent>((event) => events.emit(event))
618-
// relay to Room
619-
..on<SignalConnectionQualityUpdateEvent>((event) => events.emit(event))
620-
// relay to Room
621-
..on<SignalStreamStateUpdatedEvent>((event) => events.emit(event))
622-
// relay to Room
623-
..on<SignalSubscribedQualityUpdatedEvent>((event) => events.emit(event))
624-
// relay to Room
625-
..on<SignalSubscriptionPermissionUpdateEvent>((event) => events.emit(event))
626-
// relay to Room
627-
..on<SignalRoomUpdateEvent>((event) => events.emit(event))
628609
..on<SignalTokenUpdatedEvent>((event) {
629610
logger.fine('Server refreshed the token');
630611
token = event.token;
@@ -636,12 +617,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
636617
return;
637618
}
638619
await cleanUp();
639-
})
640-
..on<SignalMuteTrackEvent>(
641-
(event) => events.emit(EngineRemoteMuteChangedEvent(
642-
sid: event.sid,
643-
muted: event.muted,
644-
)));
620+
});
645621
}
646622

647623
extension EnginePrivateMethods on Engine {

lib/src/core/room.dart

Lines changed: 43 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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

lib/src/core/signal_client.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
186186
events.emit(SignalLeaveEvent(canReconnect: msg.leave.canReconnect));
187187
break;
188188
case lk_rtc.SignalResponse_Message.mute:
189-
events.emit(SignalMuteTrackEvent(
189+
events.emit(SignalRemoteMuteTrackEvent(
190190
sid: msg.mute.sid,
191191
muted: msg.mute.muted,
192192
));

lib/src/internal/events.dart

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class InternalTrackMuteUpdatedEvent with TrackEvent, InternalEvent {
8282

8383
@internal
8484
// Received a JoinResponse from the server.
85-
class SignalJoinResponseEvent with SignalEvent, EngineEvent, InternalEvent {
85+
class SignalJoinResponseEvent with SignalEvent, InternalEvent {
8686
final lk_rtc.JoinResponse response;
8787
const SignalJoinResponseEvent({
8888
required this.response,
@@ -91,7 +91,7 @@ class SignalJoinResponseEvent with SignalEvent, EngineEvent, InternalEvent {
9191

9292
/// Base class for a ConnectionStateUpdated event
9393
@internal
94-
abstract class ConnectionStateUpdatedEvent with EngineEvent, InternalEvent {
94+
abstract class ConnectionStateUpdatedEvent with InternalEvent {
9595
final ConnectionState newState;
9696
final ConnectionState oldState;
9797
final bool didReconnect;
@@ -168,17 +168,15 @@ class SignalTrickleEvent with SignalEvent, InternalEvent {
168168

169169
@internal
170170
// relayed by Engine
171-
class SignalParticipantUpdateEvent
172-
with SignalEvent, EngineEvent, InternalEvent {
171+
class SignalParticipantUpdateEvent with SignalEvent, InternalEvent {
173172
final List<lk_models.ParticipantInfo> participants;
174173
const SignalParticipantUpdateEvent({
175174
required this.participants,
176175
});
177176
}
178177

179178
@internal
180-
class SignalConnectionQualityUpdateEvent
181-
with SignalEvent, EngineEvent, InternalEvent {
179+
class SignalConnectionQualityUpdateEvent with SignalEvent, InternalEvent {
182180
final List<lk_rtc.ConnectionQualityInfo> updates;
183181
const SignalConnectionQualityUpdateEvent({
184182
required this.updates,
@@ -197,7 +195,7 @@ class SignalLocalTrackPublishedEvent with SignalEvent, InternalEvent {
197195
}
198196

199197
@internal
200-
class SignalRoomUpdateEvent with SignalEvent, EngineEvent, InternalEvent {
198+
class SignalRoomUpdateEvent with SignalEvent, InternalEvent {
201199
final lk_models.Room room;
202200

203201
const SignalRoomUpdateEvent({required this.room});
@@ -206,7 +204,7 @@ class SignalRoomUpdateEvent with SignalEvent, EngineEvent, InternalEvent {
206204
@internal
207205
// Speaker update received through websocket
208206
// relayed by Engine
209-
class SignalSpeakersChangedEvent with SignalEvent, EngineEvent, InternalEvent {
207+
class SignalSpeakersChangedEvent with SignalEvent, InternalEvent {
210208
final List<lk_models.SpeakerInfo> speakers;
211209

212210
const SignalSpeakersChangedEvent({
@@ -232,27 +230,25 @@ class SignalLeaveEvent with SignalEvent, InternalEvent {
232230
}
233231

234232
@internal
235-
class SignalMuteTrackEvent with SignalEvent, InternalEvent {
233+
class SignalRemoteMuteTrackEvent with SignalEvent, InternalEvent {
236234
final String sid;
237235
final bool muted;
238-
const SignalMuteTrackEvent({
236+
const SignalRemoteMuteTrackEvent({
239237
required this.sid,
240238
required this.muted,
241239
});
242240
}
243241

244242
@internal
245-
class SignalStreamStateUpdatedEvent
246-
with SignalEvent, EngineEvent, InternalEvent {
243+
class SignalStreamStateUpdatedEvent with SignalEvent, InternalEvent {
247244
final List<lk_rtc.StreamStateInfo> updates;
248245
const SignalStreamStateUpdatedEvent({
249246
required this.updates,
250247
});
251248
}
252249

253250
@internal
254-
class SignalSubscribedQualityUpdatedEvent
255-
with SignalEvent, EngineEvent, InternalEvent {
251+
class SignalSubscribedQualityUpdatedEvent with SignalEvent, InternalEvent {
256252
final String trackSid;
257253
final List<lk_rtc.SubscribedQuality> updates;
258254
const SignalSubscribedQualityUpdatedEvent({
@@ -262,8 +258,7 @@ class SignalSubscribedQualityUpdatedEvent
262258
}
263259

264260
@internal
265-
class SignalSubscriptionPermissionUpdateEvent
266-
with SignalEvent, EngineEvent, InternalEvent {
261+
class SignalSubscriptionPermissionUpdateEvent with SignalEvent, InternalEvent {
267262
final String participantSid;
268263
final String trackSid;
269264
final bool allowed;
@@ -308,16 +303,6 @@ class EngineDataPacketReceivedEvent with EngineEvent, InternalEvent {
308303
});
309304
}
310305

311-
@internal
312-
class EngineRemoteMuteChangedEvent with EngineEvent, InternalEvent {
313-
final String sid;
314-
final bool muted;
315-
const EngineRemoteMuteChangedEvent({
316-
required this.sid,
317-
required this.muted,
318-
});
319-
}
320-
321306
@internal
322307
abstract class DataChannelStateUpdatedEvent with EngineEvent, InternalEvent {
323308
final bool isPrimary;

0 commit comments

Comments
 (0)