44
44
import org .springframework .util .RouteMatcher ;
45
45
46
46
/**
47
- * Implementation of {@link RSocket} that wraps incoming requests with a
48
- * {@link Message}, delegates to a {@link Function} for handling, and then
49
- * obtains the response from a "reply" header.
47
+ * Responder {@link RSocket} that wraps the payload and metadata of incoming
48
+ * requests as a {@link Message} and then delegates to the configured
49
+ * {@link RSocketMessageHandler} to handle it. The response, if applicable, is
50
+ * obtained from the {@link RSocketPayloadReturnValueHandler#RESPONSE_HEADER
51
+ * "rsocketResponse"} header.
50
52
*
51
53
* @author Rossen Stoyanchev
52
54
* @since 5.2
53
55
*/
54
56
class MessagingRSocket extends AbstractRSocket {
55
57
56
- private final Function < Message <?>, Mono < Void >> handler ;
58
+ private final RSocketMessageHandler messageHandler ;
57
59
58
- private final Function < String , RouteMatcher . Route > routeParser ;
60
+ private final RouteMatcher routeMatcher ;
59
61
60
62
private final RSocketRequester requester ;
61
63
@@ -65,16 +67,16 @@ class MessagingRSocket extends AbstractRSocket {
65
67
private final DataBufferFactory bufferFactory ;
66
68
67
69
68
- MessagingRSocket (Function < Message <?>, Mono < Void >> handler ,
69
- Function < String , RouteMatcher . Route > routeParser , RSocketRequester requester ,
70
- @ Nullable MimeType defaultDataMimeType , DataBufferFactory bufferFactory ) {
70
+ MessagingRSocket (RSocketMessageHandler messageHandler , RouteMatcher routeMatcher ,
71
+ RSocketRequester requester , @ Nullable MimeType defaultDataMimeType ,
72
+ DataBufferFactory bufferFactory ) {
71
73
72
- this .routeParser = routeParser ;
73
-
74
- Assert .notNull (handler , "'handler' is required" );
75
- Assert .notNull (routeParser , "'routeParser' is required" );
74
+ Assert .notNull (messageHandler , "'messageHandler' is required" );
75
+ Assert .notNull (routeMatcher , "'routeMatcher' is required" );
76
76
Assert .notNull (requester , "'requester' is required" );
77
- this .handler = handler ;
77
+
78
+ this .messageHandler = messageHandler ;
79
+ this .routeMatcher = routeMatcher ;
78
80
this .requester = requester ;
79
81
this .dataMimeType = defaultDataMimeType ;
80
82
this .bufferFactory = bufferFactory ;
@@ -132,7 +134,7 @@ private Mono<Void> handle(Payload payload) {
132
134
DataBuffer dataBuffer = retainDataAndReleasePayload (payload );
133
135
int refCount = refCount (dataBuffer );
134
136
Message <?> message = MessageBuilder .createMessage (dataBuffer , headers );
135
- return Mono .defer (() -> this .handler . apply (message ))
137
+ return Mono .defer (() -> this .messageHandler . handleMessage (message ))
136
138
.doFinally (s -> {
137
139
if (refCount (dataBuffer ) == refCount ) {
138
140
DataBufferUtils .release (dataBuffer );
@@ -154,7 +156,7 @@ private Flux<Payload> handleAndReply(Payload firstPayload, Flux<Payload> payload
154
156
Flux <DataBuffer > buffers = payloads .map (this ::retainDataAndReleasePayload ).doOnSubscribe (s -> read .set (true ));
155
157
Message <Flux <DataBuffer >> message = MessageBuilder .createMessage (buffers , headers );
156
158
157
- return Mono .defer (() -> this .handler . apply (message ))
159
+ return Mono .defer (() -> this .messageHandler . handleMessage (message ))
158
160
.doFinally (s -> {
159
161
// Subscription should have happened by now due to ChannelSendOperator
160
162
if (!read .get ()) {
@@ -183,7 +185,7 @@ private DataBuffer retainDataAndReleasePayload(Payload payload) {
183
185
private MessageHeaders createHeaders (String destination , @ Nullable MonoProcessor <?> replyMono ) {
184
186
MessageHeaderAccessor headers = new MessageHeaderAccessor ();
185
187
headers .setLeaveMutable (true );
186
- RouteMatcher .Route route = this .routeParser . apply (destination );
188
+ RouteMatcher .Route route = this .routeMatcher . parseRoute (destination );
187
189
headers .setHeader (DestinationPatternsMessageCondition .LOOKUP_DESTINATION_HEADER , route );
188
190
if (this .dataMimeType != null ) {
189
191
headers .setContentType (this .dataMimeType );
0 commit comments