Skip to content

Commit efb1bd5

Browse files
PopFlamingogwynne
andauthored
Add support for NIOTransportServices (#107)
* Start using NIOTS * Require watchOS 6 * Use MultiThreadedEventLoopGroup in all cases for EventLoopGroupProvider.createNew * Update Package.swift Co-authored-by: Gwynne Raskind <gwynne@darkrainfall.org> Co-authored-by: Gwynne Raskind <gwynne@darkrainfall.org>
1 parent 3af54d0 commit efb1bd5

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

Package.swift

+5-2
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@ import PackageDescription
44
let package = Package(
55
name: "websocket-kit",
66
platforms: [
7-
.macOS(.v10_15),
8-
.iOS(.v11)
7+
.macOS(.v10_15),
8+
.iOS(.v13),
9+
.tvOS(.v13),
910
],
1011
products: [
1112
.library(name: "WebSocketKit", targets: ["WebSocketKit"]),
1213
],
1314
dependencies: [
1415
.package(url: "https://github.com/apple/swift-nio.git", from: "2.33.0"),
1516
.package(url: "https://github.com/apple/swift-nio-ssl.git", from: "2.14.0"),
17+
.package(url: "https://github.com/apple/swift-nio-transport-services.git", from: "1.11.4"),
1618
],
1719
targets: [
1820
.target(name: "WebSocketKit", dependencies: [
@@ -23,6 +25,7 @@ let package = Package(
2325
.product(name: "NIOHTTP1", package: "swift-nio"),
2426
.product(name: "NIOSSL", package: "swift-nio-ssl"),
2527
.product(name: "NIOWebSocket", package: "swift-nio"),
28+
.product(name: "NIOTransportServices", package: "swift-nio-transport-services"),
2629
]),
2730
.testTarget(name: "WebSocketKitTests", dependencies: [
2831
.target(name: "WebSocketKit"),

Sources/WebSocketKit/WebSocketClient.swift

+16-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import NIOConcurrencyHelpers
44
import NIOHTTP1
55
import NIOWebSocket
66
import NIOSSL
7+
import NIOTransportServices
78

89
public final class WebSocketClient {
910
public enum Error: Swift.Error, LocalizedError {
@@ -60,7 +61,7 @@ public final class WebSocketClient {
6061
) -> EventLoopFuture<Void> {
6162
assert(["ws", "wss"].contains(scheme))
6263
let upgradePromise = self.group.next().makePromise(of: Void.self)
63-
let bootstrap = ClientBootstrap(group: self.group)
64+
let bootstrap = WebSocketClient.makeBootstrap(on: self.group)
6465
.channelOption(ChannelOptions.socket(SocketOptionLevel(IPPROTO_TCP), TCP_NODELAY), value: 1)
6566
.channelInitializer { channel in
6667
let httpHandler = HTTPInitialRequestHandler(
@@ -141,6 +142,20 @@ public final class WebSocketClient {
141142
}
142143
}
143144
}
145+
146+
private static func makeBootstrap(on eventLoop: EventLoopGroup) -> NIOClientTCPBootstrapProtocol {
147+
#if canImport(Network)
148+
if let tsBootstrap = NIOTSConnectionBootstrap(validatingGroup: eventLoop) {
149+
return tsBootstrap
150+
}
151+
#endif
152+
153+
if let nioBootstrap = ClientBootstrap(validatingGroup: eventLoop) {
154+
return nioBootstrap
155+
}
156+
157+
fatalError("No matching bootstrap found")
158+
}
144159

145160
deinit {
146161
switch self.eventLoopGroupProvider {

0 commit comments

Comments
 (0)