From 0b985c687fe963f6bd818ff77a35c27247b98bb4 Mon Sep 17 00:00:00 2001 From: Guilherme Souza Date: Tue, 13 Sep 2022 05:32:31 -0300 Subject: [PATCH] Remove Starscream Dependency and bump minimum support platform (#11) * Remove Starscream * Bump swift-tools-version to 5.5 --- Package.resolved | 25 ------- Package.swift | 14 ++-- Sources/Realtime/RealtimeClient.swift | 6 +- Sources/Realtime/Transport.swift | 94 --------------------------- 4 files changed, 10 insertions(+), 129 deletions(-) delete mode 100644 Package.resolved diff --git a/Package.resolved b/Package.resolved deleted file mode 100644 index ecbd19e..0000000 --- a/Package.resolved +++ /dev/null @@ -1,25 +0,0 @@ -{ - "object": { - "pins": [ - { - "package": "Starscream", - "repositoryURL": "https://github.com/daltoniam/Starscream.git", - "state": { - "branch": null, - "revision": "e6b65c6d9077ea48b4a7bdda8994a1d3c6969c8d", - "version": "3.1.1" - } - }, - { - "package": "swift-nio-zlib-support", - "repositoryURL": "https://github.com/apple/swift-nio-zlib-support.git", - "state": { - "branch": null, - "revision": "37760e9a52030bb9011972c5213c3350fa9d41fd", - "version": "1.0.0" - } - } - ] - }, - "version": 1 -} diff --git a/Package.swift b/Package.swift index c360b72..eaf1e1b 100644 --- a/Package.swift +++ b/Package.swift @@ -1,23 +1,27 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.5 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "Realtime", + platforms: [ + .iOS(.v13), + .macCatalyst(.v13), + .macOS(.v10_15), + .watchOS(.v6), + .tvOS(.v13), + ], products: [ .library( name: "Realtime", targets: ["Realtime"] ) ], - dependencies: [ - .package(url: "https://github.com/daltoniam/Starscream.git", from: "3.0.0") - ], targets: [ .target( name: "Realtime", - dependencies: ["Starscream"] + dependencies: [] ), .testTarget( name: "RealtimeTests", diff --git a/Sources/Realtime/RealtimeClient.swift b/Sources/Realtime/RealtimeClient.swift index eeeb0f6..40f7ee8 100644 --- a/Sources/Realtime/RealtimeClient.swift +++ b/Sources/Realtime/RealtimeClient.swift @@ -163,11 +163,7 @@ public class RealtimeClient: TransportDelegate { endPointUrl = RealtimeClient.buildEndpointUrl( endpoint: endPoint, params: params) - if #available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) { - transport = URLSessionTransport(url: endPointUrl) - } else { - transport = StarscreamTransport(url: endPointUrl) - } + transport = URLSessionTransport(url: endPointUrl) self.params = params self.endPoint = endPoint diff --git a/Sources/Realtime/Transport.swift b/Sources/Realtime/Transport.swift index 81b5372..0e44bb7 100644 --- a/Sources/Realtime/Transport.swift +++ b/Sources/Realtime/Transport.swift @@ -19,7 +19,6 @@ // THE SOFTWARE. import Foundation -import Starscream #if canImport(FoundationNetworking) import FoundationNetworking @@ -279,96 +278,3 @@ public class URLSessionTransport: NSObject, Transport, URLSessionWebSocketDelega delegate?.onClose(code: RealtimeClient.CloseCode.abnormal.rawValue) } } - -public class StarscreamTransport: NSObject, Transport, WebSocketDelegate { - /// The URL to connect to - private let url: URL - - /// The underlying Starscream WebSocket that data is transfered over. - private var socket: WebSocket? - - /** - Initializes a `Transport` layer built using Starscream's WebSocket, which is available for - previous iOS targets back to iOS 10. - - If you are targeting iOS 13 or later, then you do not need to use this transport layer unless - you specifically prefer using Starscream as the underlying Socket connection. - - Example: - - ```swift - let url = URL("wss://example.com/socket") - let transport: Transport = StarscreamTransport(url: url) - ``` - - - parameter url: URL to connect to - */ - public init(url: URL) { - self.url = url - super.init() - } - - // MARK: - Transport - - public var readyState: TransportReadyState = .closed - public var delegate: TransportDelegate? - - public func connect() { - // Set the trasport state as connecting - readyState = .connecting - - let socket = WebSocket(url: url) - socket.delegate = self - socket.connect() - - self.socket = socket - } - - public func disconnect(code: Int, reason _: String?) { - /* - TODO: - 1. Provide a "strict" mode that fails if an invalid close code is given - 2. If strict mode is disabled, default to CloseCode.invalid - 3. Provide default .normalClosure function - */ - guard - let closeCode = CloseCode(rawValue: UInt16(code)) - else { - fatalError("Could not create a CloseCode with invalid code: [\(code)].") - } - - readyState = .closing - socket?.disconnect(closeCode: closeCode.rawValue) - } - - public func send(data: Data) { - socket?.write(data: data) - } - - // MARK: - WebSocketDelegate - - public func websocketDidConnect(socket _: WebSocketClient) { - readyState = .open - delegate?.onOpen() - } - - public func websocketDidDisconnect(socket _: WebSocketClient, error: Error?) { - let closeCode = (error as? WSError)?.code ?? RealtimeClient.CloseCode.abnormal.rawValue - // Set the state of the Transport to closed - readyState = .closed - - // Inform the Transport's delegate that an error occurred. - if let safeError = error { delegate?.onError(error: safeError) } - - // An abnormal error is results in an abnormal closure, such as internet getting dropped - // so inform the delegate that the Transport has closed abnormally. This will kick off - // the reconnect logic. - delegate?.onClose(code: closeCode) - } - - public func websocketDidReceiveMessage(socket _: WebSocketClient, text: String) { - delegate?.onMessage(message: text) - } - - public func websocketDidReceiveData(socket _: WebSocketClient, data _: Data) { /* no-op */ } -}