@@ -95,12 +95,6 @@ public class Server {
95
95
messenger. error ( error. message, code: error. code)
96
96
}
97
97
}
98
-
99
- // Clean up any uncompleted subscriptions
100
- // TODO: Re-enable this
101
- // messenger.onClose {
102
- // _ = self.context?.cleanupSubscription()
103
- // }
104
98
}
105
99
106
100
/// Define the callback run during `connection_init` resolution that allows authorization using the `payload`.
@@ -137,9 +131,7 @@ public class Server {
137
131
return
138
132
}
139
133
initialized = true
140
- messenger. send (
141
- ConnectionAckResponse ( ) . toJSON ( encoder)
142
- )
134
+ self . sendConnectionAck ( )
143
135
}
144
136
145
137
private func onSubscribe( _ subscribeRequest: SubscribeRequest , _ messenger: Messenger ) {
@@ -157,7 +149,7 @@ public class Server {
157
149
isStreaming = try graphQLRequest. isSubscription ( )
158
150
}
159
151
catch {
160
- messenger . send ( ErrorResponse ( error, id: id) . toJSON ( self . encoder ) )
152
+ self . sendError ( error, id: id)
161
153
return
162
154
}
163
155
@@ -176,22 +168,22 @@ public class Server {
176
168
177
169
observable. subscribe (
178
170
onNext: { [ weak self] resultFuture in
179
- guard let self = self , let messenger = self . messenger else { return }
171
+ guard let self = self else { return }
180
172
resultFuture. whenSuccess { result in
181
- messenger . send ( NextResponse ( result, id: id) . toJSON ( self . encoder ) )
173
+ self . sendNext ( result, id: id)
182
174
}
183
175
resultFuture. whenFailure { error in
184
- messenger . send ( ErrorResponse ( error, id: id) . toJSON ( self . encoder ) )
176
+ self . sendError ( error, id: id)
185
177
}
186
178
} ,
187
179
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)
190
182
} ,
191
183
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 ( )
195
187
}
196
188
) . disposed ( by: self . disposeBag)
197
189
}
@@ -203,12 +195,14 @@ public class Server {
203
195
else {
204
196
let executeFuture = onExecute ( graphQLRequest)
205
197
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 ( )
208
201
}
209
202
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 ( )
212
206
}
213
207
}
214
208
}
@@ -221,4 +215,54 @@ public class Server {
221
215
}
222
216
onExit ( )
223
217
}
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
+ }
224
268
}
0 commit comments