Simplify internal events (#100)

* simplify internal events

* simplify
This commit is contained in:
Hiroshi Horie
2022-04-03 12:35:08 +09:00
committed by GitHub
parent c2fe83438d
commit cd4a3f5c8a
4 changed files with 56 additions and 86 deletions
+1 -25
View File
@@ -557,16 +557,11 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
// for subscriberPrimary, we negotiate when necessary (lazy) // for subscriberPrimary, we negotiate when necessary (lazy)
await negotiate(); await negotiate();
} }
// Relay to Room
events.emit(event);
}) })
..on<SignalConnectionStateUpdatedEvent>((event) async { ..on<SignalConnectionStateUpdatedEvent>((event) async {
if (event.newState == ConnectionState.disconnected) { if (event.newState == ConnectionState.disconnected) {
await _onDisconnected(DisconnectReason.signal); await _onDisconnected(DisconnectReason.signal);
} }
// Relay to Room
events.emit(event);
}) })
..on<SignalOfferEvent>((event) async { ..on<SignalOfferEvent>((event) async {
if (subscriber == null) { if (subscriber == null) {
@@ -611,20 +606,6 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
await publisher!.addIceCandidate(event.candidate); await publisher!.addIceCandidate(event.candidate);
} }
}) })
// relay to Room
..on<SignalParticipantUpdateEvent>((event) => events.emit(event))
// relay to Room
..on<SignalSpeakersChangedEvent>((event) => events.emit(event))
// relay to Room
..on<SignalConnectionQualityUpdateEvent>((event) => events.emit(event))
// relay to Room
..on<SignalStreamStateUpdatedEvent>((event) => events.emit(event))
// relay to Room
..on<SignalSubscribedQualityUpdatedEvent>((event) => events.emit(event))
// relay to Room
..on<SignalSubscriptionPermissionUpdateEvent>((event) => events.emit(event))
// relay to Room
..on<SignalRoomUpdateEvent>((event) => events.emit(event))
..on<SignalTokenUpdatedEvent>((event) { ..on<SignalTokenUpdatedEvent>((event) {
logger.fine('Server refreshed the token'); logger.fine('Server refreshed the token');
token = event.token; token = event.token;
@@ -636,12 +617,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
return; return;
} }
await cleanUp(); await cleanUp();
}) });
..on<SignalMuteTrackEvent>(
(event) => events.emit(EngineRemoteMuteChangedEvent(
sid: event.sid,
muted: event.muted,
)));
} }
extension EnginePrivateMethods on Engine { extension EnginePrivateMethods on Engine {
+43 -34
View File
@@ -73,6 +73,8 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
final Engine engine; final Engine engine;
// suppport for multiple event listeners // suppport for multiple event listeners
late final EventsListener<EngineEvent> _engineListener; late final EventsListener<EngineEvent> _engineListener;
//
late final EventsListener<SignalEvent> _signalListener;
Room({ Room({
ConnectOptions? connectOptions, ConnectOptions? connectOptions,
@@ -82,7 +84,10 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
_roomOptions = roomOptions, _roomOptions = roomOptions,
engine = engine ?? Engine() { engine = engine ?? Engine() {
_engineListener = this.engine.createListener(); _engineListener = this.engine.createListener();
_setUpListeners(); _setUpEngineListeners();
_signalListener = this.engine.signalClient.createListener();
_setUpSignalListeners();
// Any event emitted will trigger ChangeNotifier // Any event emitted will trigger ChangeNotifier
events.listen((event) { events.listen((event) {
@@ -97,7 +102,9 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
await events.dispose(); await events.dispose();
// dispose local participant // dispose local participant
await localParticipant?.dispose(); await localParticipant?.dispose();
// dispose all listeners for RTCEngine // dispose all listeners for SignalClient
await _signalListener.dispose();
// dispose all listeners for Engine
await _engineListener.dispose(); await _engineListener.dispose();
// dispose the engine // dispose the engine
await this.engine.dispose(); await this.engine.dispose();
@@ -117,27 +124,7 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
return engine.connect(url, token, this.connectOptions); return engine.connect(url, token, this.connectOptions);
} }
void _setUpListeners() => _engineListener void _setUpSignalListeners() => _signalListener
..on<EngineConnectionStateUpdatedEvent>((event) async {
if (event.didReconnect) {
events.emit(const RoomReconnectedEvent());
await _handlePostReconnect(false);
} else if (event.newState == ConnectionState.reconnecting) {
events.emit(const RoomReconnectingEvent());
} else if (event.newState == ConnectionState.disconnected) {
await _cleanUp();
events.emit(const RoomDisconnectedEvent());
}
// always notify ChangeNotifier
notifyListeners();
})
..on<SignalConnectionStateUpdatedEvent>((event) {
// during reconnection, need to send sync state upon signal connection.
if (event.didReconnect) {
logger.fine('Sending syncState');
_sendSyncState();
}
})
..on<SignalJoinResponseEvent>((event) { ..on<SignalJoinResponseEvent>((event) {
_sid = event.response.room.sid; _sid = event.response.room.sid;
_name = event.response.room.name; _name = event.response.room.name;
@@ -163,23 +150,12 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
}) })
..on<SignalParticipantUpdateEvent>( ..on<SignalParticipantUpdateEvent>(
(event) => _onParticipantUpdateEvent(event.participants)) (event) => _onParticipantUpdateEvent(event.participants))
..on<EngineActiveSpeakersUpdateEvent>(
(event) => _onEngineActiveSpeakersUpdateEvent(event.speakers))
..on<SignalSpeakersChangedEvent>( ..on<SignalSpeakersChangedEvent>(
(event) => _onSignalSpeakersChangedEvent(event.speakers)) (event) => _onSignalSpeakersChangedEvent(event.speakers))
..on<SignalConnectionQualityUpdateEvent>( ..on<SignalConnectionQualityUpdateEvent>(
(event) => _onSignalConnectionQualityUpdateEvent(event.updates)) (event) => _onSignalConnectionQualityUpdateEvent(event.updates))
..on<SignalStreamStateUpdatedEvent>( ..on<SignalStreamStateUpdatedEvent>(
(event) => _onSignalStreamStateUpdateEvent(event.updates)) (event) => _onSignalStreamStateUpdateEvent(event.updates))
..on<EngineDataPacketReceivedEvent>(_onDataMessageEvent)
..on<EngineRemoteMuteChangedEvent>((event) async {
final publication = localParticipant?.trackPublications[event.sid];
if (event.muted) {
await publication?.mute();
} else {
await publication?.unmute();
}
})
..on<SignalSubscribedQualityUpdatedEvent>((event) { ..on<SignalSubscribedQualityUpdatedEvent>((event) {
// Signal for Dynacast // Signal for Dynacast
final options = roomOptions ?? const RoomOptions(); final options = roomOptions ?? const RoomOptions();
@@ -221,6 +197,39 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
_metadata = event.room.metadata; _metadata = event.room.metadata;
events.emit(RoomMetadataChangedEvent(metadata: event.room.metadata)); events.emit(RoomMetadataChangedEvent(metadata: event.room.metadata));
}) })
..on<SignalConnectionStateUpdatedEvent>((event) {
// during reconnection, need to send sync state upon signal connection.
if (event.didReconnect) {
logger.fine('Sending syncState');
_sendSyncState();
}
})
..on<SignalRemoteMuteTrackEvent>((event) async {
final publication = localParticipant?.trackPublications[event.sid];
if (event.muted) {
await publication?.mute();
} else {
await publication?.unmute();
}
});
void _setUpEngineListeners() => _engineListener
..on<EngineConnectionStateUpdatedEvent>((event) async {
if (event.didReconnect) {
events.emit(const RoomReconnectedEvent());
await _handlePostReconnect(false);
} else if (event.newState == ConnectionState.reconnecting) {
events.emit(const RoomReconnectingEvent());
} else if (event.newState == ConnectionState.disconnected) {
await _cleanUp();
events.emit(const RoomDisconnectedEvent());
}
// always notify ChangeNotifier
notifyListeners();
})
..on<EngineActiveSpeakersUpdateEvent>(
(event) => _onEngineActiveSpeakersUpdateEvent(event.speakers))
..on<EngineDataPacketReceivedEvent>(_onDataMessageEvent)
..on<EngineTrackAddedEvent>((event) async { ..on<EngineTrackAddedEvent>((event) async {
logger.fine('EngineTrackAddedEvent trackSid:${event.track.id}'); logger.fine('EngineTrackAddedEvent trackSid:${event.track.id}');
+1 -1
View File
@@ -186,7 +186,7 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
events.emit(SignalLeaveEvent(canReconnect: msg.leave.canReconnect)); events.emit(SignalLeaveEvent(canReconnect: msg.leave.canReconnect));
break; break;
case lk_rtc.SignalResponse_Message.mute: case lk_rtc.SignalResponse_Message.mute:
events.emit(SignalMuteTrackEvent( events.emit(SignalRemoteMuteTrackEvent(
sid: msg.mute.sid, sid: msg.mute.sid,
muted: msg.mute.muted, muted: msg.mute.muted,
)); ));
+11 -26
View File
@@ -82,7 +82,7 @@ class InternalTrackMuteUpdatedEvent with TrackEvent, InternalEvent {
@internal @internal
// Received a JoinResponse from the server. // Received a JoinResponse from the server.
class SignalJoinResponseEvent with SignalEvent, EngineEvent, InternalEvent { class SignalJoinResponseEvent with SignalEvent, InternalEvent {
final lk_rtc.JoinResponse response; final lk_rtc.JoinResponse response;
const SignalJoinResponseEvent({ const SignalJoinResponseEvent({
required this.response, required this.response,
@@ -91,7 +91,7 @@ class SignalJoinResponseEvent with SignalEvent, EngineEvent, InternalEvent {
/// Base class for a ConnectionStateUpdated event /// Base class for a ConnectionStateUpdated event
@internal @internal
abstract class ConnectionStateUpdatedEvent with EngineEvent, InternalEvent { abstract class ConnectionStateUpdatedEvent with InternalEvent {
final ConnectionState newState; final ConnectionState newState;
final ConnectionState oldState; final ConnectionState oldState;
final bool didReconnect; final bool didReconnect;
@@ -168,8 +168,7 @@ class SignalTrickleEvent with SignalEvent, InternalEvent {
@internal @internal
// relayed by Engine // relayed by Engine
class SignalParticipantUpdateEvent class SignalParticipantUpdateEvent with SignalEvent, InternalEvent {
with SignalEvent, EngineEvent, InternalEvent {
final List<lk_models.ParticipantInfo> participants; final List<lk_models.ParticipantInfo> participants;
const SignalParticipantUpdateEvent({ const SignalParticipantUpdateEvent({
required this.participants, required this.participants,
@@ -177,8 +176,7 @@ class SignalParticipantUpdateEvent
} }
@internal @internal
class SignalConnectionQualityUpdateEvent class SignalConnectionQualityUpdateEvent with SignalEvent, InternalEvent {
with SignalEvent, EngineEvent, InternalEvent {
final List<lk_rtc.ConnectionQualityInfo> updates; final List<lk_rtc.ConnectionQualityInfo> updates;
const SignalConnectionQualityUpdateEvent({ const SignalConnectionQualityUpdateEvent({
required this.updates, required this.updates,
@@ -197,7 +195,7 @@ class SignalLocalTrackPublishedEvent with SignalEvent, InternalEvent {
} }
@internal @internal
class SignalRoomUpdateEvent with SignalEvent, EngineEvent, InternalEvent { class SignalRoomUpdateEvent with SignalEvent, InternalEvent {
final lk_models.Room room; final lk_models.Room room;
const SignalRoomUpdateEvent({required this.room}); const SignalRoomUpdateEvent({required this.room});
@@ -206,7 +204,7 @@ class SignalRoomUpdateEvent with SignalEvent, EngineEvent, InternalEvent {
@internal @internal
// Speaker update received through websocket // Speaker update received through websocket
// relayed by Engine // relayed by Engine
class SignalSpeakersChangedEvent with SignalEvent, EngineEvent, InternalEvent { class SignalSpeakersChangedEvent with SignalEvent, InternalEvent {
final List<lk_models.SpeakerInfo> speakers; final List<lk_models.SpeakerInfo> speakers;
const SignalSpeakersChangedEvent({ const SignalSpeakersChangedEvent({
@@ -232,18 +230,17 @@ class SignalLeaveEvent with SignalEvent, InternalEvent {
} }
@internal @internal
class SignalMuteTrackEvent with SignalEvent, InternalEvent { class SignalRemoteMuteTrackEvent with SignalEvent, InternalEvent {
final String sid; final String sid;
final bool muted; final bool muted;
const SignalMuteTrackEvent({ const SignalRemoteMuteTrackEvent({
required this.sid, required this.sid,
required this.muted, required this.muted,
}); });
} }
@internal @internal
class SignalStreamStateUpdatedEvent class SignalStreamStateUpdatedEvent with SignalEvent, InternalEvent {
with SignalEvent, EngineEvent, InternalEvent {
final List<lk_rtc.StreamStateInfo> updates; final List<lk_rtc.StreamStateInfo> updates;
const SignalStreamStateUpdatedEvent({ const SignalStreamStateUpdatedEvent({
required this.updates, required this.updates,
@@ -251,8 +248,7 @@ class SignalStreamStateUpdatedEvent
} }
@internal @internal
class SignalSubscribedQualityUpdatedEvent class SignalSubscribedQualityUpdatedEvent with SignalEvent, InternalEvent {
with SignalEvent, EngineEvent, InternalEvent {
final String trackSid; final String trackSid;
final List<lk_rtc.SubscribedQuality> updates; final List<lk_rtc.SubscribedQuality> updates;
const SignalSubscribedQualityUpdatedEvent({ const SignalSubscribedQualityUpdatedEvent({
@@ -262,8 +258,7 @@ class SignalSubscribedQualityUpdatedEvent
} }
@internal @internal
class SignalSubscriptionPermissionUpdateEvent class SignalSubscriptionPermissionUpdateEvent with SignalEvent, InternalEvent {
with SignalEvent, EngineEvent, InternalEvent {
final String participantSid; final String participantSid;
final String trackSid; final String trackSid;
final bool allowed; final bool allowed;
@@ -308,16 +303,6 @@ class EngineDataPacketReceivedEvent with EngineEvent, InternalEvent {
}); });
} }
@internal
class EngineRemoteMuteChangedEvent with EngineEvent, InternalEvent {
final String sid;
final bool muted;
const EngineRemoteMuteChangedEvent({
required this.sid,
required this.muted,
});
}
@internal @internal
abstract class DataChannelStateUpdatedEvent with EngineEvent, InternalEvent { abstract class DataChannelStateUpdatedEvent with EngineEvent, InternalEvent {
final bool isPrimary; final bool isPrimary;