Skip to content

Commit 0bb87eb

Browse files
authored
Add complete reconnect delegate methods (#825)
To fill the [gap](#607 (comment)) in the API where `.quick` reconnect completion cannot be tracked.
1 parent 263048b commit 0bb87eb

File tree

3 files changed

+33
-2
lines changed

3 files changed

+33
-2
lines changed

.changes/reconnect-delegate

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
patch type="added" "Separate delegate methods for reconnect start/completion"

Sources/LiveKit/Core/Room+EngineDelegate.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,24 @@ extension Room {
8282
}
8383
}
8484

85+
// Notify when reconnection starts
86+
if oldState.isReconnectingWithMode == nil, state.isReconnectingWithMode != nil {
87+
if let startMode = state.isReconnectingWithMode {
88+
delegates.notify(label: { "room.didStartReconnectWithMode: \(startMode)" }) {
89+
$0.room?(self, didStartReconnectWithMode: startMode)
90+
}
91+
}
92+
}
93+
94+
// Notify when reconnection completes
95+
if oldState.isReconnectingWithMode != nil, state.isReconnectingWithMode == nil {
96+
if let completedMode = oldState.isReconnectingWithMode {
97+
delegates.notify(label: { "room.didCompleteReconnectWithMode: \(completedMode)" }) {
98+
$0.room?(self, didCompleteReconnectWithMode: completedMode)
99+
}
100+
}
101+
}
102+
85103
// Notify when reconnection mode changes
86104
if state.isReconnectingWithMode != oldState.isReconnectingWithMode,
87105
let mode = state.isReconnectingWithMode

Sources/LiveKit/Protocols/RoomDelegate.swift

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ public protocol RoomDelegate: AnyObject, Sendable {
3636
// MARK: - Connection Events
3737

3838
/// ``Room/connectionState`` has updated.
39-
/// - Note: This method is not called for ``ReconnectMode/quick``, use ``RoomDelegate/room(_:didUpdateReconnectMode:)`` instead.
39+
/// - Note: This method is not called for ``ReconnectMode/quick``, use ``RoomDelegate/room(_:didStartReconnectWithMode:)``
40+
/// and ``RoomDelegate/room(_:didCompleteReconnectWithMode:)`` instead.
4041
@objc optional
4142
func room(_ room: Room, didUpdateConnectionState connectionState: ConnectionState, from oldConnectionState: ConnectionState)
4243

@@ -45,14 +46,25 @@ public protocol RoomDelegate: AnyObject, Sendable {
4546
func roomDidConnect(_ room: Room)
4647

4748
/// Previously connected to room but re-attempting to connect due to network issues.
48-
/// - Note: This method is not called for ``ReconnectMode/quick``, use ``RoomDelegate/room(_:didUpdateReconnectMode:)`` instead.
49+
/// - Note: This method is not called for ``ReconnectMode/quick``, use ``RoomDelegate/room(_:didStartReconnectWithMode:)`` instead.
4950
@objc optional
5051
func roomIsReconnecting(_ room: Room)
5152

5253
/// Successfully re-connected to the room.
54+
/// - Note: This method is not called for ``ReconnectMode/quick``, use ``RoomDelegate/room(_:didCompleteReconnectWithMode:)`` instead.
5355
@objc optional
5456
func roomDidReconnect(_ room: Room)
5557

58+
/// Reconnection started.
59+
/// - Parameter reconnectMode: The mode being used for reconnection
60+
@objc optional
61+
func room(_ room: Room, didStartReconnectWithMode reconnectMode: ReconnectMode)
62+
63+
/// Reconnection completed successfully.
64+
/// - Parameter reconnectMode: The mode that was used for reconnection
65+
@objc optional
66+
func room(_ room: Room, didCompleteReconnectWithMode reconnectMode: ReconnectMode)
67+
5668
/// ``Room`` reconnect mode has updated.
5769
@objc optional
5870
func room(_ room: Room, didUpdateReconnectMode reconnectMode: ReconnectMode)

0 commit comments

Comments
 (0)