Skip to content

Commit 1181272

Browse files
authored
Update WebSocketHeadersSample (#839)
1 parent d8da87a commit 1181272

File tree

2 files changed

+36
-69
lines changed

2 files changed

+36
-69
lines changed

rsocket-examples/src/main/java/io/rsocket/examples/transport/ws/WebSocketHeadersSample.java

Lines changed: 35 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -17,117 +17,85 @@
1717
package io.rsocket.examples.transport.ws;
1818

1919
import io.netty.handler.codec.http.HttpResponseStatus;
20-
import io.rsocket.DuplexConnection;
21-
import io.rsocket.Payload;
2220
import io.rsocket.RSocket;
2321
import io.rsocket.SocketAcceptor;
2422
import io.rsocket.core.RSocketConnector;
2523
import io.rsocket.core.RSocketServer;
26-
import io.rsocket.fragmentation.ReassemblyDuplexConnection;
2724
import io.rsocket.frame.decoder.PayloadDecoder;
2825
import io.rsocket.transport.ServerTransport;
2926
import io.rsocket.transport.netty.WebsocketDuplexConnection;
3027
import io.rsocket.transport.netty.client.WebsocketClientTransport;
3128
import io.rsocket.util.ByteBufPayload;
3229
import java.time.Duration;
33-
import java.util.HashMap;
34-
import org.reactivestreams.Publisher;
30+
import java.util.Collections;
31+
import org.slf4j.Logger;
32+
import org.slf4j.LoggerFactory;
3533
import reactor.core.publisher.Flux;
3634
import reactor.core.publisher.Mono;
37-
import reactor.core.scheduler.Schedulers;
3835
import reactor.netty.Connection;
3936
import reactor.netty.DisposableServer;
4037
import reactor.netty.http.server.HttpServer;
4138

4239
public class WebSocketHeadersSample {
43-
static final Payload payload1 = ByteBufPayload.create("Hello ");
40+
41+
private static final Logger logger = LoggerFactory.getLogger(WebSocketHeadersSample.class);
4442

4543
public static void main(String[] args) {
4644

47-
ServerTransport.ConnectionAcceptor acceptor =
48-
RSocketServer.create(SocketAcceptor.with(new ServerRSocket()))
45+
ServerTransport.ConnectionAcceptor connectionAcceptor =
46+
RSocketServer.create(SocketAcceptor.forRequestResponse(Mono::just))
4947
.payloadDecoder(PayloadDecoder.ZERO_COPY)
5048
.asConnectionAcceptor();
5149

52-
DisposableServer disposableServer =
50+
DisposableServer server =
5351
HttpServer.create()
5452
.host("localhost")
5553
.port(0)
5654
.route(
5755
routes ->
58-
routes.ws(
56+
routes.get(
5957
"/",
60-
(in, out) -> {
61-
if (in.headers().containsValue("Authorization", "test", true)) {
62-
DuplexConnection connection =
63-
new ReassemblyDuplexConnection(
64-
new WebsocketDuplexConnection((Connection) in));
65-
return acceptor.apply(connection).then(out.neverComplete());
58+
(req, res) -> {
59+
if (req.requestHeaders().containsValue("Authorization", "test", true)) {
60+
return res.sendWebsocket(
61+
(in, out) ->
62+
connectionAcceptor
63+
.apply(new WebsocketDuplexConnection((Connection) in))
64+
.then(out.neverComplete()));
6665
}
67-
68-
return out.sendClose(
69-
HttpResponseStatus.UNAUTHORIZED.code(),
70-
HttpResponseStatus.UNAUTHORIZED.reasonPhrase());
66+
res.status(HttpResponseStatus.UNAUTHORIZED);
67+
return res.send();
7168
}))
7269
.bindNow();
7370

71+
logger.debug(
72+
"\n\nStart of Authorized WebSocket Connection\n----------------------------------\n");
73+
7474
WebsocketClientTransport clientTransport =
75-
WebsocketClientTransport.create(disposableServer.host(), disposableServer.port());
75+
WebsocketClientTransport.create(server.host(), server.port());
7676

77-
clientTransport.setTransportHeaders(
78-
() -> {
79-
HashMap<String, String> map = new HashMap<>();
80-
map.put("Authorization", "test");
81-
return map;
82-
});
77+
clientTransport.setTransportHeaders(() -> Collections.singletonMap("Authorization", "test"));
8378

84-
RSocket socket =
79+
RSocket clientRSocket =
8580
RSocketConnector.create()
8681
.keepAlive(Duration.ofMinutes(10), Duration.ofMinutes(10))
8782
.payloadDecoder(PayloadDecoder.ZERO_COPY)
8883
.connect(clientTransport)
8984
.block();
9085

91-
Flux.range(0, 100)
92-
.concatMap(i -> socket.fireAndForget(payload1.retain()))
93-
// .doOnNext(p -> {
94-
//// System.out.println(p.getDataUtf8());
95-
// p.release();
96-
// })
86+
Flux.range(1, 100)
87+
.concatMap(i -> clientRSocket.requestResponse(ByteBufPayload.create("Hello " + i)))
88+
.doOnNext(payload -> logger.debug("Processed " + payload.getDataUtf8()))
9789
.blockLast();
98-
socket.dispose();
99-
100-
WebsocketClientTransport clientTransport2 =
101-
WebsocketClientTransport.create(disposableServer.host(), disposableServer.port());
102-
103-
RSocket rSocket =
104-
RSocketConnector.create()
105-
.keepAlive(Duration.ofMinutes(10), Duration.ofMinutes(10))
106-
.payloadDecoder(PayloadDecoder.ZERO_COPY)
107-
.connect(clientTransport2)
108-
.block();
109-
110-
// expect error here because of closed channel
111-
rSocket.requestResponse(payload1).block();
112-
}
113-
114-
private static class ServerRSocket implements RSocket {
115-
116-
@Override
117-
public Mono<Void> fireAndForget(Payload payload) {
118-
// System.out.println(payload.getDataUtf8());
119-
payload.release();
120-
return Mono.empty();
121-
}
90+
clientRSocket.dispose();
12291

123-
@Override
124-
public Mono<Payload> requestResponse(Payload payload) {
125-
return Mono.just(payload);
126-
}
92+
logger.debug(
93+
"\n\nStart of Unauthorized WebSocket Upgrade\n----------------------------------\n");
12794

128-
@Override
129-
public Flux<Payload> requestChannel(Publisher<Payload> payloads) {
130-
return Flux.from(payloads).subscribeOn(Schedulers.single());
131-
}
95+
RSocketConnector.create()
96+
.keepAlive(Duration.ofMinutes(10), Duration.ofMinutes(10))
97+
.payloadDecoder(PayloadDecoder.ZERO_COPY)
98+
.connect(WebsocketClientTransport.create(server.host(), server.port()))
99+
.block();
132100
}
133101
}

rsocket-examples/src/main/resources/logback.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@
2424
</appender>
2525

2626
<logger name="io.rsocket.examples" level="DEBUG"/>
27-
28-
<!-- Set this to DEBUG to log frames -->
2927
<logger name="io.rsocket.FrameLogger" level="INFO"/>
28+
<logger name="reactor.netty" level="INFO"/>
3029

3130
<root level="INFO">
3231
<appender-ref ref="STDOUT"/>

0 commit comments

Comments
 (0)