Skip to content

Commit f1d0cd3

Browse files
Adds server 'send' methods
1 parent 996bec4 commit f1d0cd3

File tree

2 files changed

+83
-31
lines changed

2 files changed

+83
-31
lines changed

Sources/GraphQLWS/Responses.swift

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public struct CompleteResponse: Equatable, JsonEncodable {
5959
let type: ResponseMessageType
6060
public let id: String
6161

62-
init(_: GraphQLResult? = nil, id: String) {
62+
init(id: String) {
6363
self.type = .GQL_COMPLETE
6464
self.id = id
6565
}
@@ -84,14 +84,6 @@ public struct ErrorResponse: Equatable, JsonEncodable {
8484
self.payload = graphQLErrors
8585
self.id = id
8686
}
87-
88-
init(_ error: Error, id: String) {
89-
self.init([error], id: id)
90-
}
91-
92-
init(_ errorMessage: String, id: String) {
93-
self.init(GraphQLError(message: errorMessage), id: id)
94-
}
9587
}
9688

9789
/// The supported websocket response message types from the server to the client

Sources/GraphQLWS/Server.swift

Lines changed: 82 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,6 @@ public class Server {
100100
messenger.error(error.message, code: error.code)
101101
}
102102
}
103-
104-
// Clean up any uncompleted subscriptions
105-
// TODO: Re-enable this
106-
// messenger.onClose {
107-
// _ = self.context?.cleanupSubscription()
108-
// }
109103
}
110104

111105
/// Define the callback run during `connection_init` resolution that allows authorization using the `payload`.
@@ -143,9 +137,7 @@ public class Server {
143137
return
144138
}
145139
initialized = true
146-
messenger.send(
147-
ConnectionAckResponse().toJSON(self.encoder)
148-
)
140+
self.sendConnectionAck()
149141
// TODO: Should we send the `ka` message?
150142
}
151143

@@ -164,7 +156,7 @@ public class Server {
164156
isStreaming = try graphQLRequest.isSubscription()
165157
}
166158
catch {
167-
messenger.send(ErrorResponse(error, id: id).toJSON(self.encoder))
159+
self.sendError(error, id: id)
168160
return
169161
}
170162

@@ -181,22 +173,22 @@ public class Server {
181173
let observable = stream.observable
182174
observable.subscribe(
183175
onNext: { [weak self] resultFuture in
184-
guard let self = self, let messenger = self.messenger else { return }
176+
guard let self = self else { return }
185177
resultFuture.whenSuccess { result in
186-
messenger.send(DataResponse(result, id: id).toJSON(self.encoder))
178+
self.sendData(result, id: id)
187179
}
188180
resultFuture.whenFailure { error in
189-
messenger.send(ErrorResponse(error, id: id).toJSON(self.encoder))
181+
self.sendError(error, id: id)
190182
}
191183
},
192184
onError: { [weak self] error in
193-
guard let self = self, let messenger = self.messenger else { return }
194-
messenger.send(ErrorResponse(error, id: id).toJSON(self.encoder))
185+
guard let self = self else { return }
186+
self.sendError(error, id: id)
195187
},
196188
onCompleted: { [weak self] in
197-
guard let self = self, let messenger = self.messenger else { return }
198-
messenger.send(CompleteResponse(id: id).toJSON(self.encoder))
199-
_ = messenger.close()
189+
guard let self = self else { return }
190+
self.sendComplete(id: id)
191+
self.messenger?.close()
200192
}
201193
).disposed(by: self.disposeBag)
202194
}
@@ -208,12 +200,14 @@ public class Server {
208200
else {
209201
let executeFuture = onExecute(graphQLRequest)
210202
executeFuture.whenSuccess { result in
211-
messenger.send(DataResponse(result, id: id).toJSON(self.encoder))
212-
messenger.send(CompleteResponse(id: id).toJSON(self.encoder))
203+
self.sendData(result, id: id)
204+
self.sendComplete(id: id)
205+
messenger.close()
213206
}
214207
executeFuture.whenFailure { error in
215-
messenger.send(ErrorResponse(error, id: id).toJSON(self.encoder))
216-
messenger.send(CompleteResponse(id: id).toJSON(self.encoder))
208+
self.sendError(error, id: id)
209+
self.sendComplete(id: id)
210+
messenger.close()
217211
}
218212
}
219213
}
@@ -231,4 +225,70 @@ public class Server {
231225
onExit()
232226
_ = messenger.close()
233227
}
228+
229+
/// Send a `connection_ack` response through the messenger
230+
private func sendConnectionAck(_ payload: [String: Map]? = nil) {
231+
guard let messenger = messenger else { return }
232+
messenger.send(
233+
ConnectionAckResponse(payload).toJSON(encoder)
234+
)
235+
}
236+
237+
/// Send a `connection_error` response through the messenger
238+
private func sendConnectionError(_ payload: [String: Map]? = nil) {
239+
guard let messenger = messenger else { return }
240+
messenger.send(
241+
ConnectionErrorResponse(payload).toJSON(encoder)
242+
)
243+
}
244+
245+
/// Send a `ka` response through the messenger
246+
private func sendConnectionKeepAlive(_ payload: [String: Map]? = nil) {
247+
guard let messenger = messenger else { return }
248+
messenger.send(
249+
ConnectionKeepAliveResponse(payload).toJSON(encoder)
250+
)
251+
}
252+
253+
/// Send a `data` response through the messenger
254+
private func sendData(_ payload: GraphQLResult? = nil, id: String) {
255+
guard let messenger = messenger else { return }
256+
messenger.send(
257+
DataResponse(
258+
payload,
259+
id: id
260+
).toJSON(encoder)
261+
)
262+
}
263+
264+
/// Send a `complete` response through the messenger
265+
private func sendComplete(id: String) {
266+
guard let messenger = messenger else { return }
267+
messenger.send(
268+
CompleteResponse(
269+
id: id
270+
).toJSON(encoder)
271+
)
272+
}
273+
274+
/// Send an `error` response through the messenger
275+
private func sendError(_ errors: [Error], id: String) {
276+
guard let messenger = messenger else { return }
277+
messenger.send(
278+
ErrorResponse(
279+
errors,
280+
id: id
281+
).toJSON(encoder)
282+
)
283+
}
284+
285+
/// Send an `error` response through the messenger
286+
private func sendError(_ error: Error, id: String) {
287+
self.sendError([error], id: id)
288+
}
289+
290+
/// Send an `error` response through the messenger
291+
private func sendError(_ errorMessage: String, id: String) {
292+
self.sendError(GraphQLError(message: errorMessage), id: id)
293+
}
234294
}

0 commit comments

Comments
 (0)