@@ -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