Skip to content

Commit 944047f

Browse files
drstrangesRoman Donchenko
authored andcommitted
Send CANCEL frame on stream request cancelled by client
1 parent 1eb02b3 commit 944047f

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

lib/core/rsocket_requester.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ class CompleterSubscriber implements Subscriber {
4545
}
4646

4747
class StreamSubscriber implements Subscriber {
48-
StreamController controller = StreamController();
48+
final StreamController controller;
49+
50+
StreamSubscriber({FutureOr<void> onCancel() = null})
51+
: controller = StreamController(onCancel: onCancel);
4952

5053
@override
5154
void onNext(Payload value) {
@@ -123,7 +126,10 @@ class RSocketRequester extends RSocket {
123126
var streamId = streamIdSupplier.nextStreamId(senders);
124127
connection.write(FrameCodec.encodeRequestStreamFrame(
125128
streamId, MAX_REQUEST_N_SIZE, payload));
126-
var streamSubscriber = StreamSubscriber();
129+
var streamSubscriber = StreamSubscriber(onCancel: () {
130+
connection.write(FrameCodec.encodeCancelFrame(streamId));
131+
senders.remove(streamId);
132+
});
127133
senders[streamId] = streamSubscriber;
128134
return streamSubscriber.payloadStream();
129135
};

0 commit comments

Comments
 (0)