Skip to content

Commit 6e9ae8e

Browse files
Merge pull request #1064 from liveview-native/disconnect-continuation-misuse
Disable onClose handler after receiving once
2 parents efa2b7c + cfed874 commit 6e9ae8e

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

Sources/LiveViewNative/Coordinators/LiveSessionCoordinator.swift

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -285,28 +285,33 @@ public class LiveSessionCoordinator<R: RootRegistry>: ObservableObject {
285285
wsEndpoint.scheme = self.url.scheme == "https" ? "wss" : "ws"
286286
wsEndpoint.path = "/live/websocket"
287287
let socket = Socket(endPoint: wsEndpoint.string!, transport: { URLSessionTransport(url: $0, configuration: configuration) }, paramsClosure: {["_csrf_token": domValues.phxCSRFToken]})
288-
socket.onOpen { [weak self, weak socket] in
288+
289+
var refs = [String]()
290+
291+
refs.append(socket.onOpen { [weak self, weak socket] in
289292
guard let socket else { return }
290293
guard self != nil else {
291294
socket.disconnect()
292295
return
293296
}
294297
logger.debug("[Socket] Opened")
298+
socket.off(refs)
295299
continuation.resume(returning: socket)
296-
}
297-
socket.onClose { logger.debug("[Socket] Closed") }
298-
socket.onError { [weak self, weak socket] (error) in
300+
})
301+
refs.append(socket.onError { [weak self, weak socket] (error) in
299302
guard let socket else { return }
300303
guard self != nil else {
301304
socket.disconnect()
302305
return
303306
}
304307
logger.error("[Socket] Error: \(String(describing: error))")
308+
socket.off(refs)
305309
continuation.resume(throwing: LiveConnectionError.socketError(error))
306-
}
307-
socket.logger = { message in logger.debug("[Socket] \(message)") }
310+
})
308311
socket.connect()
309312
}
313+
self.socket?.onClose { logger.debug("[Socket] Closed") }
314+
self.socket?.logger = { message in logger.debug("[Socket] \(message)") }
310315

311316
self.internalState = .connected
312317

Sources/LiveViewNative/Coordinators/LiveViewCoordinator.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,10 +268,10 @@ public class LiveViewCoordinator<R: RootRegistry>: ObservableObject {
268268
!channel.isClosed
269269
{
270270
await withCheckedContinuation { continuation in
271-
channel.onClose { _ in
272-
continuation.resume()
273-
}
274271
channel.leave()
272+
.receive("ok") { _ in
273+
continuation.resume()
274+
}
275275
}
276276
}
277277
channel = nil

0 commit comments

Comments
 (0)