From 2d5bc11bb40c92f1fe02327e3e1fb71b4aa6dd3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82az=CC=87ej=20Pankowski?= <86720177+pblazej@users.noreply.github.com> Date: Wed, 22 Oct 2025 09:06:16 +0200 Subject: [PATCH 1/2] Add complete reconnect delegate methods --- .changes/reconnect-delegate | 1 + Sources/LiveKit/Core/Room+EngineDelegate.swift | 18 ++++++++++++++++++ Sources/LiveKit/Protocols/RoomDelegate.swift | 14 ++++++++++++-- 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 .changes/reconnect-delegate diff --git a/.changes/reconnect-delegate b/.changes/reconnect-delegate new file mode 100644 index 000000000..31999f489 --- /dev/null +++ b/.changes/reconnect-delegate @@ -0,0 +1 @@ +patch type="added" "Separate delegate methods for reconnect start/completion" \ No newline at end of file diff --git a/Sources/LiveKit/Core/Room+EngineDelegate.swift b/Sources/LiveKit/Core/Room+EngineDelegate.swift index 6e00f5dbf..3c30b0863 100644 --- a/Sources/LiveKit/Core/Room+EngineDelegate.swift +++ b/Sources/LiveKit/Core/Room+EngineDelegate.swift @@ -82,6 +82,24 @@ extension Room { } } + // Notify when reconnection starts + if oldState.isReconnectingWithMode == nil, state.isReconnectingWithMode != nil { + if let startMode = state.isReconnectingWithMode { + delegates.notify(label: { "room.didStartReconnectWithMode: \(startMode)" }) { + $0.room?(self, didStartReconnectWithMode: startMode) + } + } + } + + // Notify when reconnection completes + if oldState.isReconnectingWithMode != nil, state.isReconnectingWithMode == nil { + if let completedMode = oldState.isReconnectingWithMode { + delegates.notify(label: { "room.didCompleteReconnectWithMode: \(completedMode)" }) { + $0.room?(self, didCompleteReconnectWithMode: completedMode) + } + } + } + // Notify when reconnection mode changes if state.isReconnectingWithMode != oldState.isReconnectingWithMode, let mode = state.isReconnectingWithMode diff --git a/Sources/LiveKit/Protocols/RoomDelegate.swift b/Sources/LiveKit/Protocols/RoomDelegate.swift index c6b603ee1..e017b9177 100644 --- a/Sources/LiveKit/Protocols/RoomDelegate.swift +++ b/Sources/LiveKit/Protocols/RoomDelegate.swift @@ -36,7 +36,7 @@ public protocol RoomDelegate: AnyObject, Sendable { // MARK: - Connection Events /// ``Room/connectionState`` has updated. - /// - Note: This method is not called for ``ReconnectMode/quick``, use ``RoomDelegate/room(_:didUpdateReconnectMode:)`` instead. + /// - Note: This method is not called for ``ReconnectMode/quick``, use ``RoomDelegate/room(_:didStartReconnectWithMode:)`` instead. @objc optional func room(_ room: Room, didUpdateConnectionState connectionState: ConnectionState, from oldConnectionState: ConnectionState) @@ -45,7 +45,7 @@ public protocol RoomDelegate: AnyObject, Sendable { func roomDidConnect(_ room: Room) /// Previously connected to room but re-attempting to connect due to network issues. - /// - Note: This method is not called for ``ReconnectMode/quick``, use ``RoomDelegate/room(_:didUpdateReconnectMode:)`` instead. + /// - Note: This method is not called for ``ReconnectMode/quick``, use ``RoomDelegate/room(_:didStartReconnectWithMode:)`` instead. @objc optional func roomIsReconnecting(_ room: Room) @@ -53,6 +53,16 @@ public protocol RoomDelegate: AnyObject, Sendable { @objc optional func roomDidReconnect(_ room: Room) + /// Reconnection started. + /// - Parameter reconnectMode: The mode being used for reconnection + @objc optional + func room(_ room: Room, didStartReconnectWithMode reconnectMode: ReconnectMode) + + /// Reconnection completed successfully. + /// - Parameter reconnectMode: The mode that was used for reconnection + @objc optional + func room(_ room: Room, didCompleteReconnectWithMode reconnectMode: ReconnectMode) + /// ``Room`` reconnect mode has updated. @objc optional func room(_ room: Room, didUpdateReconnectMode reconnectMode: ReconnectMode) From 78739351bb874f1c9ecc73ac6705c0807170b596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82az=CC=87ej=20Pankowski?= <86720177+pblazej@users.noreply.github.com> Date: Wed, 22 Oct 2025 09:11:29 +0200 Subject: [PATCH 2/2] Comments for symmetry --- Sources/LiveKit/Protocols/RoomDelegate.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Sources/LiveKit/Protocols/RoomDelegate.swift b/Sources/LiveKit/Protocols/RoomDelegate.swift index e017b9177..c276f746d 100644 --- a/Sources/LiveKit/Protocols/RoomDelegate.swift +++ b/Sources/LiveKit/Protocols/RoomDelegate.swift @@ -36,7 +36,8 @@ public protocol RoomDelegate: AnyObject, Sendable { // MARK: - Connection Events /// ``Room/connectionState`` has updated. - /// - Note: This method is not called for ``ReconnectMode/quick``, use ``RoomDelegate/room(_:didStartReconnectWithMode:)`` instead. + /// - Note: This method is not called for ``ReconnectMode/quick``, use ``RoomDelegate/room(_:didStartReconnectWithMode:)`` + /// and ``RoomDelegate/room(_:didCompleteReconnectWithMode:)`` instead. @objc optional func room(_ room: Room, didUpdateConnectionState connectionState: ConnectionState, from oldConnectionState: ConnectionState) @@ -50,6 +51,7 @@ public protocol RoomDelegate: AnyObject, Sendable { func roomIsReconnecting(_ room: Room) /// Successfully re-connected to the room. + /// - Note: This method is not called for ``ReconnectMode/quick``, use ``RoomDelegate/room(_:didCompleteReconnectWithMode:)`` instead. @objc optional func roomDidReconnect(_ room: Room)