36
36
import org .springframework .graphql .GraphQlRequest ;
37
37
import org .springframework .graphql .support .MapExecutionResult ;
38
38
import org .springframework .graphql .support .MapGraphQlError ;
39
- import org .springframework .graphql .web .webflux .GraphQlWebSocketMessage ;
39
+ import org .springframework .graphql .web .support .GraphQlMessage ;
40
+ import org .springframework .graphql .web .support .GraphQlMessageType ;
40
41
import org .springframework .http .HttpHeaders ;
41
42
import org .springframework .http .codec .CodecConfigurer ;
42
43
import org .springframework .lang .Nullable ;
@@ -168,7 +169,7 @@ private static class GraphQlSessionHandler implements WebSocketHandler {
168
169
169
170
private final CodecDelegate codecDelegate ;
170
171
171
- private final GraphQlWebSocketMessage connectionInitMessage ;
172
+ private final GraphQlMessage connectionInitMessage ;
172
173
173
174
private final Consumer <Map <String , Object >> connectionAckHandler ;
174
175
@@ -181,7 +182,7 @@ private static class GraphQlSessionHandler implements WebSocketHandler {
181
182
@ Nullable Object connectionInitPayload , Consumer <Map <String , Object >> connectionAckHandler ) {
182
183
183
184
this .codecDelegate = new CodecDelegate (codecConfigurer );
184
- this .connectionInitMessage = GraphQlWebSocketMessage .connectionInit (connectionInitPayload );
185
+ this .connectionInitMessage = GraphQlMessage .connectionInit (connectionInitPayload );
185
186
this .connectionAckHandler = connectionAckHandler ;
186
187
this .graphQlSessionSink = Sinks .unsafe ().one ();
187
188
}
@@ -240,8 +241,8 @@ public Mono<Void> handle(WebSocketSession session) {
240
241
.flatMap (webSocketMessage -> {
241
242
if (sessionNotInitialized ()) {
242
243
try {
243
- GraphQlWebSocketMessage message = this .codecDelegate .decode (webSocketMessage );
244
- Assert .state (message .getType (). equals ( "connection_ack" ) ,
244
+ GraphQlMessage message = this .codecDelegate .decode (webSocketMessage );
245
+ Assert .state (message .resolvedType () == GraphQlMessageType . CONNECTION_ACK ,
245
246
() -> "Unexpected message before connection_ack: " + message );
246
247
this .connectionAckHandler .accept (message .getPayload ());
247
248
if (logger .isDebugEnabled ()) {
@@ -259,15 +260,15 @@ public Mono<Void> handle(WebSocketSession session) {
259
260
}
260
261
}
261
262
else {
262
- GraphQlWebSocketMessage message = this .codecDelegate .decode (webSocketMessage );
263
- switch (message .getType ()) {
264
- case "next" :
263
+ GraphQlMessage message = this .codecDelegate .decode (webSocketMessage );
264
+ switch (message .resolvedType ()) {
265
+ case NEXT :
265
266
graphQlSession .handleNext (message );
266
267
break ;
267
- case "error" :
268
+ case ERROR :
268
269
graphQlSession .handleError (message );
269
270
break ;
270
- case "complete" :
271
+ case COMPLETE :
271
272
graphQlSession .handleComplete (message );
272
273
break ;
273
274
default :
@@ -366,7 +367,7 @@ private static class GraphQlSession {
366
367
367
368
private final AtomicLong requestIndex = new AtomicLong ();
368
369
369
- private final Sinks .Many <GraphQlWebSocketMessage > requestSink = Sinks .many ().unicast ().onBackpressureBuffer ();
370
+ private final Sinks .Many <GraphQlMessage > requestSink = Sinks .many ().unicast ().onBackpressureBuffer ();
370
371
371
372
private final Map <String , Sinks .One <ExecutionResult >> resultSinks = new ConcurrentHashMap <>();
372
373
@@ -381,14 +382,14 @@ private static class GraphQlSession {
381
382
/**
382
383
* Return the {@code Flux} of GraphQL requests to send as WebSocket messages.
383
384
*/
384
- public Flux <GraphQlWebSocketMessage > getRequestFlux () {
385
+ public Flux <GraphQlMessage > getRequestFlux () {
385
386
return this .requestSink .asFlux ();
386
387
}
387
388
388
389
public Mono <ExecutionResult > execute (GraphQlRequest request ) {
389
390
String id = String .valueOf (this .requestIndex .incrementAndGet ());
390
391
try {
391
- GraphQlWebSocketMessage message = GraphQlWebSocketMessage .subscribe (id , request );
392
+ GraphQlMessage message = GraphQlMessage .subscribe (id , request );
392
393
Sinks .One <ExecutionResult > sink = Sinks .one ();
393
394
this .resultSinks .put (id , sink );
394
395
trySend (message );
@@ -403,7 +404,7 @@ public Mono<ExecutionResult> execute(GraphQlRequest request) {
403
404
public Flux <ExecutionResult > executeSubscription (GraphQlRequest request ) {
404
405
String id = String .valueOf (this .requestIndex .incrementAndGet ());
405
406
try {
406
- GraphQlWebSocketMessage message = GraphQlWebSocketMessage .subscribe (id , request );
407
+ GraphQlMessage message = GraphQlMessage .subscribe (id , request );
407
408
Sinks .Many <ExecutionResult > sink = Sinks .many ().unicast ().onBackpressureBuffer ();
408
409
this .streamingSinks .put (id , sink );
409
410
trySend (message );
@@ -417,7 +418,7 @@ public Flux<ExecutionResult> executeSubscription(GraphQlRequest request) {
417
418
418
419
// TODO: queue to serialize sending?
419
420
420
- private void trySend (GraphQlWebSocketMessage message ) {
421
+ private void trySend (GraphQlMessage message ) {
421
422
Sinks .EmitResult emitResult = null ;
422
423
for (int i = 0 ; i < 100 ; i ++) {
423
424
emitResult = this .requestSink .tryEmitNext (message );
@@ -432,7 +433,7 @@ private void cancelStream(String id) {
432
433
Sinks .Many <ExecutionResult > streamSink = this .streamingSinks .remove (id );
433
434
if (streamSink != null ) {
434
435
try {
435
- trySend (GraphQlWebSocketMessage .complete (id ));
436
+ trySend (GraphQlMessage .complete (id ));
436
437
}
437
438
catch (Exception ex ) {
438
439
if (logger .isErrorEnabled ()) {
@@ -447,7 +448,7 @@ private void cancelStream(String id) {
447
448
/**
448
449
* Handle a "next" message and route to its recipient.
449
450
*/
450
- public void handleNext (GraphQlWebSocketMessage message ) {
451
+ public void handleNext (GraphQlMessage message ) {
451
452
String id = message .getId ();
452
453
Sinks .One <ExecutionResult > sink = this .resultSinks .remove (id );
453
454
Sinks .Many <ExecutionResult > streamingSink = this .streamingSinks .get (id );
@@ -459,7 +460,7 @@ public void handleNext(GraphQlWebSocketMessage message) {
459
460
return ;
460
461
}
461
462
462
- Map <String , Object > resultMap = message .getPayloadOrDefault ( Collections . emptyMap () );
463
+ Map <String , Object > resultMap = message .getPayload ( );
463
464
ExecutionResult result = MapExecutionResult .from (resultMap );
464
465
465
466
Sinks .EmitResult emitResult = (sink != null ? sink .tryEmitValue (result ) : streamingSink .tryEmitNext (result ));
@@ -475,7 +476,7 @@ public void handleNext(GraphQlWebSocketMessage message) {
475
476
* Handle an "error" message, turning it into an {@link ExecutionResult}
476
477
* for a single result response, or signaling an error to streams.
477
478
*/
478
- public void handleError (GraphQlWebSocketMessage message ) {
479
+ public void handleError (GraphQlMessage message ) {
479
480
String id = message .getId ();
480
481
Sinks .One <ExecutionResult > sink = this .resultSinks .remove (id );
481
482
Sinks .Many <ExecutionResult > streamingSink = this .streamingSinks .remove (id );
@@ -487,7 +488,7 @@ public void handleError(GraphQlWebSocketMessage message) {
487
488
return ;
488
489
}
489
490
490
- List <Map <String , Object >> payload = message .getPayloadOrDefault ( Collections . emptyList () );
491
+ List <Map <String , Object >> payload = message .getPayload ( );
491
492
492
493
Sinks .EmitResult emitResult ;
493
494
if (sink != null ) {
@@ -508,7 +509,7 @@ public void handleError(GraphQlWebSocketMessage message) {
508
509
/**
509
510
* Handle a "complete" message.
510
511
*/
511
- public void handleComplete (GraphQlWebSocketMessage message ) {
512
+ public void handleComplete (GraphQlMessage message ) {
512
513
Sinks .One <ExecutionResult > resultSink = this .resultSinks .remove (message .getId ());
513
514
Sinks .Many <ExecutionResult > streamingResultSink = this .streamingSinks .remove (message .getId ());
514
515
0 commit comments