From f5547e70dbf924194c66289e98523a53d339c949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Pantalea=CC=83o?= <bruno.ing879@gmail.com> Date: Tue, 26 Mar 2024 10:54:24 +0100 Subject: [PATCH 1/2] Use StarScream branch which prevents multiple URLSession creation --- Package.resolved | 8 ++++---- Package.swift | 4 ++-- Source/Internal/HAConnectionImpl+Responses.swift | 2 +- .../ResponseController/HAResponseController.swift | 2 ++ 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Package.resolved b/Package.resolved index 73ddc97..16727c0 100644 --- a/Package.resolved +++ b/Package.resolved @@ -12,11 +12,11 @@ }, { "package": "Starscream", - "repositoryURL": "https://github.com/daltoniam/Starscream", + "repositoryURL": "https://github.com/bgoncal/Starscream", "state": { - "branch": null, - "revision": "df8d82047f6654d8e4b655d1b1525c64e1059d21", - "version": "4.0.4" + "branch": "ha-URLSession-fix", + "revision": "7e3d24425c20649105cb4bdd612b6bab66f73ade", + "version": null } } ] diff --git a/Package.swift b/Package.swift index 7403a48..8558baf 100644 --- a/Package.swift +++ b/Package.swift @@ -19,8 +19,8 @@ public let package = Package( ], dependencies: [ .package( - url: "https://github.com/daltoniam/Starscream", - from: "4.0.4" + url: "https://github.com/bgoncal/Starscream", + .branchItem("ha-URLSession-fix") ), .package( url: "https://github.com/mxcl/PromiseKit", diff --git a/Source/Internal/HAConnectionImpl+Responses.swift b/Source/Internal/HAConnectionImpl+Responses.swift index 054db5f..b2c8a85 100644 --- a/Source/Internal/HAConnectionImpl+Responses.swift +++ b/Source/Internal/HAConnectionImpl+Responses.swift @@ -1,7 +1,7 @@ import Starscream extension HAConnectionImpl: Starscream.WebSocketDelegate { - func didReceive(event: Starscream.WebSocketEvent, client: Starscream.WebSocket) { + func didReceive(event: Starscream.WebSocketEvent, client: any Starscream.WebSocketClient) { responseController.didReceive(event: event) } } diff --git a/Source/Internal/ResponseController/HAResponseController.swift b/Source/Internal/ResponseController/HAResponseController.swift index 7cd30da..81c7238 100644 --- a/Source/Internal/ResponseController/HAResponseController.swift +++ b/Source/Internal/ResponseController/HAResponseController.swift @@ -124,6 +124,8 @@ internal class HAResponseControllerImpl: HAResponseController { case let .error(error): HAGlobal.log(.error, "Error: \(String(describing: error))") phase = .disconnected(error: error, forReset: false) + case .peerClosed: + HAGlobal.log(.info, "Peer closed") } } From 560c62a7fd0c1a0034deb61c6a5b47b13a2e7b8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Pantalea=CC=83o?= <bruno.ing879@gmail.com> Date: Tue, 2 Apr 2024 14:16:42 +0200 Subject: [PATCH 2/2] Add test for new case --- .../ResponseController/HAResponseController.swift | 1 + Tests/HAResponseController.test.swift | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/Source/Internal/ResponseController/HAResponseController.swift b/Source/Internal/ResponseController/HAResponseController.swift index 81c7238..3d41020 100644 --- a/Source/Internal/ResponseController/HAResponseController.swift +++ b/Source/Internal/ResponseController/HAResponseController.swift @@ -126,6 +126,7 @@ internal class HAResponseControllerImpl: HAResponseController { phase = .disconnected(error: error, forReset: false) case .peerClosed: HAGlobal.log(.info, "Peer closed") + phase = .disconnected(error: nil, forReset: false) } } diff --git a/Tests/HAResponseController.test.swift b/Tests/HAResponseController.test.swift index e9a2f48..72a25b5 100644 --- a/Tests/HAResponseController.test.swift +++ b/Tests/HAResponseController.test.swift @@ -72,6 +72,14 @@ internal class HAResponseControllerTests: XCTestCase { } } + func testPeerClosedEvent() { + fireConnected() + controller.didReceive(event: .peerClosed) + waitForCallback() + XCTAssertEqual(delegate.lastPhase, .disconnected(error: nil, forReset: false)) + XCTAssertNil(delegate.lastReceived) + } + func testAuthFlow() throws { fireConnected() try fireText(