organize the cleanUp chain

This commit is contained in:
Hiroshi Horie
2022-03-04 21:39:28 +09:00
parent 99460dd436
commit 4fd35eb41d
3 changed files with 26 additions and 28 deletions
+7 -12
View File
@@ -88,9 +88,9 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
_setUpSignalListeners(); _setUpSignalListeners();
onDispose(() async { onDispose(() async {
await cleanUp();
await events.dispose(); await events.dispose();
await delays.dispose(); await delays.dispose();
await close();
await _signalListener.dispose(); await _signalListener.dispose();
}); });
} }
@@ -137,27 +137,22 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
} }
} }
/// Close connection between the server. // resets internal state to a re-usable state
Future<void> close() async { Future<void> cleanUp() async {
logger.fine('${runtimeType}.close()'); logger.fine('[${objectId}] cleanUp()');
if (_connectionState == ConnectionState.disconnected) {
logger.warning('${runtimeType}.close() already disconnected');
}
// _statsTimer.cancel();
// cancel all ongoing delays // cancel all ongoing delays
await delays.cancelAll(); await delays.cancelAll();
// PCTransport is responsible for disposing RTCPeerConnection
await publisher?.dispose(); await publisher?.dispose();
publisher = null; publisher = null;
await subscriber?.dispose(); await subscriber?.dispose();
subscriber = null; subscriber = null;
await signalClient.disconnect(); await signalClient.cleanUp();
_updateConnectionState(ConnectionState.disconnected); _updateConnectionState(ConnectionState.disconnected);
// notifyListeners();
} }
@internal @internal
@@ -647,7 +642,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
'[Signal] Received Leave while engine is reconnecting, ignoring...'); '[Signal] Received Leave while engine is reconnecting, ignoring...');
return; return;
} }
await close(); await cleanUp();
}) })
..on<SignalMuteTrackEvent>( ..on<SignalMuteTrackEvent>(
(event) => events.emit(EngineRemoteMuteChangedEvent( (event) => events.emit(EngineRemoteMuteChangedEvent(
+15 -9
View File
@@ -91,6 +91,8 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
}); });
onDispose(() async { onDispose(() async {
// clean up routine
await _cleanUp();
// dispose events // dispose events
await events.dispose(); await events.dispose();
// dispose local participant // dispose local participant
@@ -489,24 +491,28 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
extension RoomPrivateMethods on Room { extension RoomPrivateMethods on Room {
// resets internal state to a re-usable state // resets internal state to a re-usable state
Future<void> _cleanUp() async { Future<void> _cleanUp() async {
logger.fine('[$objectId] _handleClose()'); logger.fine('[${objectId}] cleanUp()');
if (connectionState == ConnectionState.disconnected) {
logger.warning('[$objectId]: close() already disconnected');
}
// clean up RemoteParticipants // clean up RemoteParticipants
for (final _ in _participants.values.toList()) { for (final participant in _participants.values) {
// RemoteParticipant is responsible for disposing resources // RemoteParticipant is responsible for disposing resources
await _.dispose(); await participant.dispose();
} }
_participants.clear(); _participants.clear();
// clean up LocalParticipant // clean up LocalParticipant
await localParticipant?.unpublishAllTracks(); await localParticipant?.unpublishAllTracks();
// clean up engine
await engine.close();
_activeSpeakers.clear(); _activeSpeakers.clear();
// clean up engine
await engine.cleanUp();
// reset params
_name = null;
_sid = null;
_metadata = null;
_serverVersion = null;
_serverRegion = null;
} }
} }
+4 -7
View File
@@ -36,8 +36,8 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
}); });
onDispose(() async { onDispose(() async {
await events.dispose();
await cleanUp(); await cleanUp();
await events.dispose();
}); });
} }
@@ -106,19 +106,16 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
} }
} }
// resets internal state to a re-usable state
@internal @internal
Future<void> cleanUp() async { Future<void> cleanUp() async {
logger.fine('[${objectId}] cleanUp()');
await _ws?.dispose(); await _ws?.dispose();
_ws = null; _ws = null;
_queue.clear(); _queue.clear();
} }
@internal
Future<void> disconnect() async {
logger.fine('SignalClient disconnect');
await cleanUp();
}
void _sendRequest( void _sendRequest(
lk_rtc.SignalRequest req, { lk_rtc.SignalRequest req, {
bool enqueueIfReconnecting = true, bool enqueueIfReconnecting = true,