Skip to content

Commit f62c247

Browse files
committed
fix: properly intercept room refresh token events
1 parent af56d61 commit f62c247

1 file changed

Lines changed: 28 additions & 14 deletions

File tree

livekit-rtc/livekit/rtc/audio_stream.py

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,7 @@ def __init__(
106106
```
107107
"""
108108
self._track: Track | None = track
109-
self._room_ref: "Optional[weakref.ref[Room]]" = (
110-
weakref.ref(room) if room is not None else None
111-
)
109+
self._room_ref: "Optional[weakref.ref[Room]]" = None
112110
self._sample_rate = sample_rate
113111
self._num_channels = num_channels
114112
self._frame_size_ms = frame_size_ms
@@ -143,6 +141,8 @@ def __init__(
143141
self._ffi_handle = FfiHandle(stream.handle.id)
144142
self._info = stream.info
145143

144+
self._set_room(room)
145+
146146
if self._track is not None:
147147
self._track._register_audio_stream(self)
148148

@@ -248,20 +248,33 @@ def from_track(
248248
)
249249

250250
def _set_room(self, room: Optional["Room"]) -> None:
251+
old_room = self._resolve_room()
252+
if old_room is not room:
253+
if old_room is not None:
254+
old_room.off("token_refreshed", self._on_room_token_refreshed)
255+
if room is not None:
256+
room.on("token_refreshed", self._on_room_token_refreshed)
257+
251258
self._room_ref = weakref.ref(room) if room is not None else None
252259

253-
if self._processor:
254-
room = self._resolve_room()
255-
if room:
256-
if room._token is not None and room._server_url is not None:
257-
self._processor._on_credentials_updated(token=room._token, url=room._server_url)
260+
if self._processor and room is not None:
261+
if room._token is not None and room._server_url is not None:
262+
self._processor._on_credentials_updated(token=room._token, url=room._server_url)
258263

259-
participant_identity, publication_sid = self._find_publication() or ("", "")
260-
self._processor._on_stream_info_updated(
261-
room_name=room.name,
262-
participant_identity=participant_identity,
263-
publication_sid=publication_sid,
264-
)
264+
participant_identity, publication_sid = self._find_publication() or ("", "")
265+
self._processor._on_stream_info_updated(
266+
room_name=room.name,
267+
participant_identity=participant_identity,
268+
publication_sid=publication_sid,
269+
)
270+
271+
def _on_room_token_refreshed(self) -> None:
272+
if self._processor is None:
273+
return
274+
room = self._resolve_room()
275+
if room is None or room._token is None or room._server_url is None:
276+
return
277+
self._processor._on_credentials_updated(token=room._token, url=room._server_url)
265278

266279
def _resolve_room(self) -> Optional["Room"]:
267280
return self._room_ref() if self._room_ref is not None else None
@@ -360,6 +373,7 @@ async def aclose(self) -> None:
360373
"""
361374
if self._track is not None:
362375
self._track._unregister_audio_stream(self)
376+
self._set_room(None)
363377
self._ffi_handle.dispose()
364378
await self._task
365379

0 commit comments

Comments
 (0)