From 02498887f7d0bb3650b3406b09beadea50236c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Monnom?= Date: Mon, 2 Mar 2026 15:12:03 -0800 Subject: [PATCH 1/2] add optional reason to Room.disconnect() --- .../livekit/rtc/_proto/participant_pb2.py | 18 ++++++++++---- livekit-rtc/livekit/rtc/_proto/room_pb2.py | 24 +++++++++++++------ livekit-rtc/livekit/rtc/room.py | 9 ++++--- 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/livekit-rtc/livekit/rtc/_proto/participant_pb2.py b/livekit-rtc/livekit/rtc/_proto/participant_pb2.py index 4b45e523..769f0307 100644 --- a/livekit-rtc/livekit/rtc/_proto/participant_pb2.py +++ b/livekit-rtc/livekit/rtc/_proto/participant_pb2.py @@ -1,12 +1,22 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: participant.proto -# Protobuf Python Version: 4.25.1 +# Protobuf Python Version: 6.33.4 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 33, + 4, + '', + 'participant.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -21,10 +31,10 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'participant_pb2', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'\252\002\rLiveKit.Proto' - _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._options = None + _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._loaded_options = None _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_options = b'8\001' _globals['_PARTICIPANTKIND']._serialized_start=866 _globals['_PARTICIPANTKIND']._serialized_end=1088 diff --git a/livekit-rtc/livekit/rtc/_proto/room_pb2.py b/livekit-rtc/livekit/rtc/_proto/room_pb2.py index dc580c98..9513abdd 100644 --- a/livekit-rtc/livekit/rtc/_proto/room_pb2.py +++ b/livekit-rtc/livekit/rtc/_proto/room_pb2.py @@ -1,12 +1,22 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: room.proto -# Protobuf Python Version: 4.25.1 +# Protobuf Python Version: 6.33.4 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 33, + 4, + '', + 'room.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -26,16 +36,16 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'room_pb2', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'\252\002\rLiveKit.Proto' - _globals['_PUBLISHDATAREQUEST'].fields_by_name['destination_sids']._options = None + _globals['_PUBLISHDATAREQUEST'].fields_by_name['destination_sids']._loaded_options = None _globals['_PUBLISHDATAREQUEST'].fields_by_name['destination_sids']._serialized_options = b'\030\001' - _globals['_ROOMOPTIONS'].fields_by_name['e2ee']._options = None + _globals['_ROOMOPTIONS'].fields_by_name['e2ee']._loaded_options = None _globals['_ROOMOPTIONS'].fields_by_name['e2ee']._serialized_options = b'\030\001' - _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._options = None + _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._loaded_options = None _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._options = None + _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._loaded_options = None _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_options = b'8\001' _globals['_ICETRANSPORTTYPE']._serialized_start=13907 _globals['_ICETRANSPORTTYPE']._serialized_end=13987 diff --git a/livekit-rtc/livekit/rtc/room.py b/livekit-rtc/livekit/rtc/room.py index f4ab63a7..edc02be8 100644 --- a/livekit-rtc/livekit/rtc/room.py +++ b/livekit-rtc/livekit/rtc/room.py @@ -573,7 +573,9 @@ def unregister_text_stream_handler(self, topic: str): if self._text_stream_handlers.get(topic): self._text_stream_handlers.pop(topic) - async def disconnect(self) -> None: + async def disconnect( + self, *, reason: DisconnectReason = DisconnectReason.CLIENT_INITIATED + ) -> None: """Disconnects from the room.""" if not self.isconnected(): return @@ -583,6 +585,7 @@ async def disconnect(self) -> None: req = proto_ffi.FfiRequest() req.disconnect.room_handle = self._ffi_handle.handle # type: ignore + req.disconnect.reason = reason # type: ignore queue = FfiClient.instance.queue.subscribe() try: resp = FfiClient.instance.request(req) @@ -596,10 +599,10 @@ async def disconnect(self) -> None: # we should manually flip the state, since the connection could have been torn down before # the callbacks were processed if self._connection_state != ConnectionState.CONN_DISCONNECTED: - self.local_participant._info.disconnect_reason = DisconnectReason.CLIENT_INITIATED + self.local_participant._info.disconnect_reason = reason self._connection_state = ConnectionState.CONN_DISCONNECTED self.emit("connection_state_changed", self._connection_state) - self.emit("disconnected", DisconnectReason.CLIENT_INITIATED) + self.emit("disconnected", reason) async def _listen_task(self) -> None: # listen to incoming room events From 0ee9336c2376f11fef21a257baae2910381c163c Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 23:12:54 +0000 Subject: [PATCH 2/2] generated protobuf --- .../livekit/rtc/_proto/participant_pb2.py | 18 ++++---------- livekit-rtc/livekit/rtc/_proto/room_pb2.py | 24 ++++++------------- 2 files changed, 11 insertions(+), 31 deletions(-) diff --git a/livekit-rtc/livekit/rtc/_proto/participant_pb2.py b/livekit-rtc/livekit/rtc/_proto/participant_pb2.py index 769f0307..4b45e523 100644 --- a/livekit-rtc/livekit/rtc/_proto/participant_pb2.py +++ b/livekit-rtc/livekit/rtc/_proto/participant_pb2.py @@ -1,22 +1,12 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE # source: participant.proto -# Protobuf Python Version: 6.33.4 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 6, - 33, - 4, - '', - 'participant.proto' -) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -31,10 +21,10 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'participant_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'\252\002\rLiveKit.Proto' - _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._loaded_options = None + _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._options = None _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_options = b'8\001' _globals['_PARTICIPANTKIND']._serialized_start=866 _globals['_PARTICIPANTKIND']._serialized_end=1088 diff --git a/livekit-rtc/livekit/rtc/_proto/room_pb2.py b/livekit-rtc/livekit/rtc/_proto/room_pb2.py index 9513abdd..dc580c98 100644 --- a/livekit-rtc/livekit/rtc/_proto/room_pb2.py +++ b/livekit-rtc/livekit/rtc/_proto/room_pb2.py @@ -1,22 +1,12 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE # source: room.proto -# Protobuf Python Version: 6.33.4 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 6, - 33, - 4, - '', - 'room.proto' -) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -36,16 +26,16 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'room_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'\252\002\rLiveKit.Proto' - _globals['_PUBLISHDATAREQUEST'].fields_by_name['destination_sids']._loaded_options = None + _globals['_PUBLISHDATAREQUEST'].fields_by_name['destination_sids']._options = None _globals['_PUBLISHDATAREQUEST'].fields_by_name['destination_sids']._serialized_options = b'\030\001' - _globals['_ROOMOPTIONS'].fields_by_name['e2ee']._loaded_options = None + _globals['_ROOMOPTIONS'].fields_by_name['e2ee']._options = None _globals['_ROOMOPTIONS'].fields_by_name['e2ee']._serialized_options = b'\030\001' - _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._loaded_options = None + _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._options = None _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._loaded_options = None + _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._options = None _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_options = b'8\001' _globals['_ICETRANSPORTTYPE']._serialized_start=13907 _globals['_ICETRANSPORTTYPE']._serialized_end=13987