@@ -27,32 +27,32 @@ import GraphQLTransportWS
27
27
/// Messenger wrapper for WebSockets
28
28
class WebSocketMessenger : Messenger {
29
29
private weak var websocket: WebSocket?
30
- private var onReceive: (String ) -> Void = { _ in }
31
-
30
+ private var onReceive: (String ) async throws -> Void = { _ in }
31
+
32
32
init (websocket : WebSocket) {
33
33
self .websocket = websocket
34
34
websocket.onText { _ , message in
35
- self .onReceive (message)
35
+ try await self .onReceive (message)
36
36
}
37
37
}
38
-
39
- func send <S >(_ message : S) where S: Collection , S.Element == Character {
38
+
39
+ func send <S >(_ message : S) where S: Collection , S.Element == Character async throws {
40
40
guard let websocket = websocket else { return }
41
- websocket.send (message)
41
+ try await websocket.send (message)
42
42
}
43
-
44
- func onReceive (callback : @escaping (String ) -> Void ) {
43
+
44
+ func onReceive (callback : @escaping (String ) async throws -> Void ) {
45
45
self .onReceive = callback
46
46
}
47
-
48
- func error (_ message : String , code : Int ) {
47
+
48
+ func error (_ message : String , code : Int ) async throws {
49
49
guard let websocket = websocket else { return }
50
- websocket.send (" \( code ) : \( message ) " )
50
+ try await websocket.send (" \( code ) : \( message ) " )
51
51
}
52
-
53
- func close () {
52
+
53
+ func close () async throws {
54
54
guard let websocket = websocket else { return }
55
- _ = websocket.close ()
55
+ try await websocket.close ()
56
56
}
57
57
}
58
58
```
@@ -67,7 +67,7 @@ routes.webSocket(
67
67
let server = GraphQLTransportWS.Server < EmptyInitPayload?> (
68
68
messenger : messenger,
69
69
onExecute : { graphQLRequest in
70
- api.execute (
70
+ try await api.execute (
71
71
request : graphQLRequest.query ,
72
72
context : context,
73
73
on : self .eventLoop ,
@@ -76,7 +76,7 @@ routes.webSocket(
76
76
)
77
77
},
78
78
onSubscribe : { graphQLRequest in
79
- api.subscribe (
79
+ try await api.subscribe (
80
80
request : graphQLRequest.query ,
81
81
context : context,
82
82
on : self .eventLoop ,
@@ -128,8 +128,8 @@ If the `payload` field is not required on your server, you may make Server's gen
128
128
129
129
## Memory Management
130
130
131
- Memory ownership among the Server, Client, and Messenger may seem a little backwards. This is because the Swift/Vapor WebSocket
132
- implementation persists WebSocket objects long after their callback and they are expected to retain strong memory references to the
131
+ Memory ownership among the Server, Client, and Messenger may seem a little backwards. This is because the Swift/Vapor WebSocket
132
+ implementation persists WebSocket objects long after their callback and they are expected to retain strong memory references to the
133
133
objects required for responses. In order to align cleanly and avoid memory cycles, Server and Client are injected strongly into Messenger
134
134
callbacks, and only hold weak references to their Messenger. This means that Messenger objects (or their enclosing WebSocket) must
135
135
be persisted to have the connected Server or Client objects function. That is, if a Server's Messenger falls out of scope and deinitializes,
0 commit comments