extractOfferedWsProtocols
Description
Extracts the list of WebSocket subprotocols as offered by the client in the Sec-WebSocket-Protocol
header if this is a WebSocket request. Rejects with an ExpectedWebSocketRequestRejection, otherwise.
The extractOfferedWsProtocols
directive is used as a building block for Custom Directives to provide the extracted protocols to the inner route.
Example
final Flow<Message, Message, NotUsed> echoService = Flow.of(Message.class).buffer(1, OverflowStrategy.backpressure());
final Route websocketRoute = path("services", () ->
route(
extractOfferedWsProtocols(protocols ->
handleWebSocketMessagesForOptionalProtocol(echoService, protocols.stream().findFirst())
)
)
);
// tests:
// create a testing probe representing the client-side
final WSProbe wsClient = WSProbe.create(system(), materializer());
testRoute(websocketRoute)
.run(WS(Uri.create("/services"), wsClient.flow(), materializer(), Arrays.asList("echo", "alfa", "kilo")))
.assertHeaderExists(SecWebSocketProtocol.create("echo"));
wsClient.sendMessage("ping");
wsClient.expectMessage("ping");
wsClient.sendCompletion();
wsClient.expectCompletion();