Skip to content

Commit bb5cafa

Browse files
Adds server 'send' methods
1 parent 9fbfc91 commit bb5cafa

File tree

2 files changed

+67
-31
lines changed

2 files changed

+67
-31
lines changed

Sources/GraphQLTransportWS/Responses.swift

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public struct CompleteResponse: Equatable, JsonEncodable {
3737
let type: ResponseMessageType
3838
public let id: String
3939

40-
init(_: GraphQLResult? = nil, id: String) {
40+
init(id: String) {
4141
self.type = .complete
4242
self.id = id
4343
}
@@ -62,14 +62,6 @@ public struct ErrorResponse: Equatable, JsonEncodable {
6262
self.payload = graphQLErrors
6363
self.id = id
6464
}
65-
66-
init(_ error: Error, id: String) {
67-
self.init([error], id: id)
68-
}
69-
70-
init(_ errorMessage: String, id: String) {
71-
self.init(GraphQLError(message: errorMessage), id: id)
72-
}
7365
}
7466

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

Sources/GraphQLTransportWS/Server.swift

Lines changed: 66 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,6 @@ public class Server {
9595
messenger.error(error.message, code: error.code)
9696
}
9797
}
98-
99-
// Clean up any uncompleted subscriptions
100-
// TODO: Re-enable this
101-
// messenger.onClose {
102-
// _ = self.context?.cleanupSubscription()
103-
// }
10498
}
10599

106100
/// Define the callback run during `connection_init` resolution that allows authorization using the `payload`.
@@ -137,9 +131,7 @@ public class Server {
137131
return
138132
}
139133
initialized = true
140-
messenger.send(
141-
ConnectionAckResponse().toJSON(encoder)
142-
)
134+
self.sendConnectionAck()
143135
}
144136

145137
private func onSubscribe(_ subscribeRequest: SubscribeRequest, _ messenger: Messenger) {
@@ -157,7 +149,7 @@ public class Server {
157149
isStreaming = try graphQLRequest.isSubscription()
158150
}
159151
catch {
160-
messenger.send(ErrorResponse(error, id: id).toJSON(self.encoder))
152+
self.sendError(error, id: id)
161153
return
162154
}
163155

@@ -176,22 +168,22 @@ public class Server {
176168

177169
observable.subscribe(
178170
onNext: { [weak self] resultFuture in
179-
guard let self = self, let messenger = self.messenger else { return }
171+
guard let self = self else { return }
180172
resultFuture.whenSuccess { result in
181-
messenger.send(NextResponse(result, id: id).toJSON(self.encoder))
173+
self.sendNext(result, id: id)
182174
}
183175
resultFuture.whenFailure { error in
184-
messenger.send(ErrorResponse(error, id: id).toJSON(self.encoder))
176+
self.sendError(error, id: id)
185177
}
186178
},
187179
onError: { [weak self] error in
188-
guard let self = self, let messenger = self.messenger else { return }
189-
messenger.send(ErrorResponse(error, id: id).toJSON(self.encoder))
180+
guard let self = self else { return }
181+
self.sendError(error, id: id)
190182
},
191183
onCompleted: { [weak self] in
192-
guard let self = self, let messenger = self.messenger else { return }
193-
messenger.send(CompleteResponse(id: id).toJSON(self.encoder))
194-
_ = messenger.close()
184+
guard let self = self else { return }
185+
self.sendComplete(id: id)
186+
self.messenger?.close()
195187
}
196188
).disposed(by: self.disposeBag)
197189
}
@@ -203,12 +195,14 @@ public class Server {
203195
else {
204196
let executeFuture = onExecute(graphQLRequest)
205197
executeFuture.whenSuccess { result in
206-
messenger.send(NextResponse(result, id: id).toJSON(self.encoder))
207-
messenger.send(CompleteResponse(id: id).toJSON(self.encoder))
198+
self.sendNext(result, id: id)
199+
self.sendComplete(id: id)
200+
self.messenger?.close()
208201
}
209202
executeFuture.whenFailure { error in
210-
messenger.send(ErrorResponse(error, id: id).toJSON(self.encoder))
211-
messenger.send(CompleteResponse(id: id).toJSON(self.encoder))
203+
self.sendError(error, id: id)
204+
self.sendComplete(id: id)
205+
self.messenger?.close()
212206
}
213207
}
214208
}
@@ -221,4 +215,54 @@ public class Server {
221215
}
222216
onExit()
223217
}
218+
219+
/// Send a `connection_ack` response through the messenger
220+
private func sendConnectionAck(_ payload: [String: Map]? = nil) {
221+
guard let messenger = messenger else { return }
222+
messenger.send(
223+
ConnectionAckResponse(payload).toJSON(encoder)
224+
)
225+
}
226+
227+
/// Send a `next` response through the messenger
228+
private func sendNext(_ payload: GraphQLResult? = nil, id: String) {
229+
guard let messenger = messenger else { return }
230+
messenger.send(
231+
NextResponse(
232+
payload,
233+
id: id
234+
).toJSON(encoder)
235+
)
236+
}
237+
238+
/// Send a `complete` response through the messenger
239+
private func sendComplete(id: String) {
240+
guard let messenger = messenger else { return }
241+
messenger.send(
242+
CompleteResponse(
243+
id: id
244+
).toJSON(encoder)
245+
)
246+
}
247+
248+
/// Send an `error` response through the messenger
249+
private func sendError(_ errors: [Error], id: String) {
250+
guard let messenger = messenger else { return }
251+
messenger.send(
252+
ErrorResponse(
253+
errors,
254+
id: id
255+
).toJSON(encoder)
256+
)
257+
}
258+
259+
/// Send an `error` response through the messenger
260+
private func sendError(_ error: Error, id: String) {
261+
self.sendError([error], id: id)
262+
}
263+
264+
/// Send an `error` response through the messenger
265+
private func sendError(_ errorMessage: String, id: String) {
266+
self.sendError(GraphQLError(message: errorMessage), id: id)
267+
}
224268
}

0 commit comments

Comments
 (0)