diff --git a/Sources/LiveViewNative/Coordinators/LiveSessionCoordinator.swift b/Sources/LiveViewNative/Coordinators/LiveSessionCoordinator.swift index 2418bc2a4..d742c38d2 100644 --- a/Sources/LiveViewNative/Coordinators/LiveSessionCoordinator.swift +++ b/Sources/LiveViewNative/Coordinators/LiveSessionCoordinator.swift @@ -266,15 +266,7 @@ public class LiveSessionCoordinator: ObservableObject { } } - let liveChannel = try await self.liveSocket!.joinLiveviewChannel( - .some([ - "_format": .str(string: LiveSessionParameters.platform), - "_interface": .object(object: LiveSessionParameters.platformParams) - ]), - nil - ) - - self.navigationPath.last!.coordinator.join(liveChannel) + try await self.joinLiveViewChannel() self.state = .connected @@ -328,6 +320,18 @@ public class LiveSessionCoordinator: ObservableObject { } } + + func joinLiveViewChannel() async throws { + let liveChannel = try await self.liveSocket!.joinLiveviewChannel( + .some([ + "_format": .str(string: LiveSessionParameters.platform), + "_interface": .object(object: LiveSessionParameters.platformParams) + ]), + nil + ) + + self.navigationPath.last?.coordinator.join(liveChannel) + } private func disconnect(preserveNavigationPath: Bool = false) async { do { diff --git a/Sources/LiveViewNative/Coordinators/LiveViewCoordinator.swift b/Sources/LiveViewNative/Coordinators/LiveViewCoordinator.swift index bfc4e741b..90920f6f0 100644 --- a/Sources/LiveViewNative/Coordinators/LiveViewCoordinator.swift +++ b/Sources/LiveViewNative/Coordinators/LiveViewCoordinator.swift @@ -270,6 +270,13 @@ public class LiveViewCoordinator: ObservableObject { guard !Task.isCancelled else { return } do { switch event.event { + case .phoenix(phoenix: .error): + logger.error("encountered error in reply - channel reconnecting"); + if let liveChannel { + let channel = liveChannel.channel() + try await channel.shutdown() + } + try await session.joinLiveViewChannel() case .user(user: "diff"): switch event.payload { case let .jsonPayload(json): @@ -342,6 +349,7 @@ public class LiveViewCoordinator: ObservableObject { } func join(_ liveChannel: LiveViewNativeCore.LiveChannel) { + self.liveChannel = liveChannel let channel = liveChannel.channel() self.channel = channel