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..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(_:didUpdateReconnectMode:)`` 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) @@ -45,14 +46,25 @@ 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) /// 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) + /// 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)