@@ -26,10 +26,10 @@ public class WebSocketClient {
26
26
var channel: Channel? = nil
27
27
var tlsEnabled: Bool = false
28
28
var closeSent: Bool = false
29
-
30
- let upgradedSignalled = DispatchSemaphore(value: 0 )
31
- let locker = DispatchQueue(label: WEBSOCKET_LOCKER_QUEUE)
32
- let threadGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)
29
+
30
+ let locker = DispatchQueue(label: WEBSOCKET_LOCKER_QUEUE, qos: .background )
31
+
32
+ var threadGroup: MultiThreadedEventLoopGroup? = nil
33
33
34
34
weak var delegate: WebSocketClientDelegate? = nil
35
35
@@ -184,6 +184,10 @@ public class WebSocketClient {
184
184
self.maxFrameSize = maxFrameSize
185
185
self.tlsEnabled = tlsEnabled
186
186
self.delegate = delegate
187
+
188
+ DispatchQueue.global(qos: .background).async {
189
+ self.threadGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)
190
+ }
187
191
}
188
192
189
193
/// Create a new `WebSocketClient`.
@@ -207,10 +211,14 @@ public class WebSocketClient {
207
211
self.maxFrameSize = 24
208
212
self.tlsEnabled = tlsEnabled
209
213
self.delegate = delegate
214
+
215
+ DispatchQueue.global(qos: .background).async {
216
+ self.threadGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)
217
+ }
210
218
}
211
219
212
220
deinit {
213
- try! threadGroup.syncShutdownGracefully()
221
+ try! threadGroup! .syncShutdownGracefully()
214
222
}
215
223
216
224
// MARK: - Open connection
@@ -221,16 +229,16 @@ public class WebSocketClient {
221
229
SocketOptionLevel(SOL_SOCKET),
222
230
SO_REUSEPORT
223
231
)
232
+
233
+ while(threadGroup == nil) {}
224
234
225
- let bootstrap = ClientBootstrap(group: threadGroup)
235
+ let bootstrap = ClientBootstrap(group: threadGroup! )
226
236
.channelOption(socketOptions, value: 1)
227
237
.channelInitializer(self.openChannel)
228
238
229
239
_ = try bootstrap
230
240
.connect(host: self.host, port: self.port)
231
241
.wait()
232
-
233
- self.upgradedSignalled.wait()
234
242
}
235
243
236
244
private func openChannel(channel: Channel) -> EventLoopFuture<Void > {
@@ -260,13 +268,10 @@ public class WebSocketClient {
260
268
}
261
269
262
270
private func upgradePipelineHandler(channel: Channel, response: HTTPResponseHead) -> EventLoopFuture<Void > {
263
- self.onOpen(channel)
264
-
265
271
let handler = MessageHandler(client: self)
266
272
267
273
if response.status == .switchingProtocols {
268
274
self.channel = channel
269
- self.upgradedSignalled.signal()
270
275
}
271
276
272
277
return channel.pipeline.addHandler(handler)
0 commit comments