rust-sdks
rust-sdks copied to clipboard
livekit: wait for disconnect before callback
should fix a race condition where in node-sdks await room.disconnect()
doesn't wait for the room status update to change.
draft because it doesn't work reliably yet: patched node-sdks still fails approximately one in fifty times.
node-sdks diff
diff --git a/packages/livekit-rtc/src/room.ts b/packages/livekit-rtc/src/room.ts
index 143774f..f9bebeb 100644
--- a/packages/livekit-rtc/src/room.ts
+++ b/packages/livekit-rtc/src/room.ts
@@ -16,6 +16,7 @@ import type {
ConnectResponse,
ConnectionQuality,
DataPacketKind,
+ DisconnectCallback,
DisconnectResponse,
IceServer,
RoomInfo,
@@ -148,7 +149,7 @@ export class Room extends (EventEmitter as new () => TypedEmitter<RoomCallbacks>
return;
}
- FfiClient.instance.request<DisconnectResponse>({
+ const res = FfiClient.instance.request<DisconnectResponse>({
message: {
case: 'disconnect',
value: {
@@ -157,6 +158,10 @@ export class Room extends (EventEmitter as new () => TypedEmitter<RoomCallbacks>
},
});
+ await FfiClient.instance.waitFor<DisconnectCallback>((ev: FfiEvent) => {
+ return ev.message.case == 'disconnect' && ev.message.value.asyncId == res.asyncId;
+ });
+
FfiClient.instance.removeAllListeners();
this.removeAllListeners();
}