extractOfferedWsProtocols
Signature
def extractOfferedWsProtocols: Directive1[immutable.Seq[String]]
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
def echoService: Flow[Message, Message, Any] =
Flow[Message]
// needed because a noop flow hasn't any buffer that would start processing in tests
.buffer(1, OverflowStrategy.backpressure)
def route =
path("services") {
extractOfferedWsProtocols { protocols =>
handleWebSocketMessagesForOptionalProtocol(echoService, protocols.headOption)
}
}
// tests:
val wsClient = WSProbe()
// WS creates a WebSocket request for testing
WS("/services", wsClient.flow, List("echo", "alfa", "kilo")) ~> route ~> check {
expectWebSocketUpgradeWithProtocol { protocol =>
protocol shouldEqual "echo"
wsClient.sendMessage("ping")
wsClient.expectMessage("ping")
wsClient.sendCompletion()
wsClient.expectCompletion()
}
}