1
1
#if canImport(Starscream)
2
2
import Foundation
3
+ import Logging
3
4
import Starscream
4
5
6
+ private let log = Logger ( label: " LighthouseWebSocket.StarscreamWebSocket " )
7
+
5
8
public final class _StarscreamWebSocket : WebSocketProtocol , Starscream . WebSocketDelegate {
6
9
private var webSocket : Starscream . WebSocket
7
10
private var connectHandlers : [ ( Result < Void , any Error > ) -> Void ] = [ ]
@@ -13,18 +16,25 @@ public final class _StarscreamWebSocket: WebSocketProtocol, Starscream.WebSocket
13
16
}
14
17
15
18
public func connect( ) async throws {
19
+ log. trace ( " Connecting " )
16
20
try await withCheckedThrowingContinuation { continuation in
17
21
connectHandlers. append ( continuation. resume ( with: ) )
18
22
webSocket. connect ( )
19
23
}
20
24
}
21
25
22
26
public func onBinary( _ handler: @escaping ( Data ) -> Void ) throws {
27
+ log. trace ( " Adding binary message handler " )
23
28
binaryMessageHandlers. append ( handler)
24
29
}
25
30
26
31
public func didReceive( event: WebSocketEvent , client: any WebSocketClient ) {
32
+ log. trace ( " Received WebSocketEvent \( event) " )
27
33
switch event {
34
+ case . connected( _) :
35
+ while let handler = connectHandlers. popLast ( ) {
36
+ handler ( . success( ( ) ) )
37
+ }
28
38
case . error( let error) :
29
39
while let handler = connectHandlers. popLast ( ) {
30
40
handler ( . failure( error ?? WebSocketError . unknown) )
@@ -39,6 +49,7 @@ public final class _StarscreamWebSocket: WebSocketProtocol, Starscream.WebSocket
39
49
}
40
50
41
51
public func send( _ data: Data ) async throws {
52
+ log. trace ( " Sending binary message " )
42
53
await withCheckedContinuation { continuation in
43
54
webSocket. write ( data: data, completion: continuation. resume)
44
55
}
0 commit comments