fix dispose triggering onDispose twice

This commit is contained in:
Hiroshi Horie
2021-12-23 01:50:14 +07:00
parent 91f73bcdab
commit a0c7744baa
2 changed files with 17 additions and 13 deletions
+9 -8
View File
@@ -22,23 +22,24 @@ class LiveKitWebSocketIO implements LiveKitWebSocket {
]) { ]) {
_subscription = _ws.listen( _subscription = _ws.listen(
(dynamic data) => options?.onData?.call(data), (dynamic data) => options?.onData?.call(data),
onDone: () => dispose(), onDone: () async {
await _subscription.cancel();
options?.onDispose?.call();
},
); );
} }
@override @override
Future<void> dispose() async { Future<void> dispose() async {
await _subscription.cancel(); if (_ws.readyState != io.WebSocket.closed) {
await _ws.close(); await _ws.close();
options?.onDispose?.call(); }
} }
@override @override
void send(List<int> data) { void send(List<int> data) {
// 0 CONNECTING, 1 OPEN, 2 CLOSING, 3 CLOSED if (_ws.readyState != io.WebSocket.open) {
if (_ws.readyState != 1) { logger.fine('[$objectId] Socket not open (state: ${_ws.readyState})');
logger.fine(
'[$objectId] Tried to send data (readyState: ${_ws.readyState})');
return; return;
} }
+8 -5
View File
@@ -27,7 +27,11 @@ class LiveKitWebSocketWeb implements LiveKitWebSocket {
dynamic _data = _.data is ByteBuffer ? _.data.asUint8List() : _.data; dynamic _data = _.data is ByteBuffer ? _.data.asUint8List() : _.data;
options?.onData?.call(_data); options?.onData?.call(_data);
}); });
_closeSubscription = _ws.onClose.listen((_) => dispose()); _closeSubscription = _ws.onClose.listen((_) async {
await _messageSubscription.cancel();
await _closeSubscription.cancel();
options?.onDispose?.call();
});
} }
@override @override
@@ -35,10 +39,9 @@ class LiveKitWebSocketWeb implements LiveKitWebSocket {
@override @override
Future<void> dispose() async { Future<void> dispose() async {
options?.onDispose?.call(); if (_ws.readyState != html.WebSocket.CLOSED) {
await _messageSubscription.cancel(); _ws.close();
await _closeSubscription.cancel(); }
_ws.close();
} }
static Future<LiveKitWebSocketWeb> connect( static Future<LiveKitWebSocketWeb> connect(