Example usage for org.springframework.web.reactive.socket WebSocketHandler getSubProtocols

List of usage examples for org.springframework.web.reactive.socket WebSocketHandler getSubProtocols

Introduction

In this page you can find the example usage for org.springframework.web.reactive.socket WebSocketHandler getSubProtocols.

Prototype

default List<String> getSubProtocols() 

Source Link

Document

Return the list of sub-protocols supported by this handler.

Usage

From source file:org.springframework.web.reactive.socket.client.JettyWebSocketClient.java

private Mono<Void> executeInternal(URI url, HttpHeaders headers, WebSocketHandler handler) {
    MonoProcessor<Void> completionMono = MonoProcessor.create();
    return Mono.fromCallable(() -> {
        if (logger.isDebugEnabled()) {
            logger.debug("Connecting to " + url);
        }/*w  w  w. j  a  v a2s. co  m*/
        Object jettyHandler = createHandler(url, handler, completionMono);
        ClientUpgradeRequest request = new ClientUpgradeRequest();
        request.setSubProtocols(handler.getSubProtocols());
        UpgradeListener upgradeListener = new DefaultUpgradeListener(headers);
        return this.jettyClient.connect(jettyHandler, url, request, upgradeListener);
    }).then(completionMono);
}

From source file:org.springframework.web.reactive.socket.client.ReactorNettyWebSocketClient.java

@Override
public Mono<Void> execute(URI url, HttpHeaders requestHeaders, WebSocketHandler handler) {
    return getHttpClient().headers(nettyHeaders -> setNettyHeaders(requestHeaders, nettyHeaders))
            .websocket(StringUtils.collectionToCommaDelimitedString(handler.getSubProtocols()))
            .uri(url.toString()).handle((inbound, outbound) -> {
                HttpHeaders responseHeaders = toHttpHeaders(inbound);
                String protocol = responseHeaders.getFirst("Sec-WebSocket-Protocol");
                HandshakeInfo info = new HandshakeInfo(url, responseHeaders, Mono.empty(), protocol);
                NettyDataBufferFactory factory = new NettyDataBufferFactory(outbound.alloc());
                WebSocketSession session = new ReactorNettyWebSocketSession(inbound, outbound, info, factory);
                if (logger.isDebugEnabled()) {
                    logger.debug("Started session '" + session.getId() + "' for " + url);
                }// ww  w  . j ava 2  s  .  co m
                return handler.handle(session);
            }).doOnRequest(n -> {
                if (logger.isDebugEnabled()) {
                    logger.debug("Connecting to " + url);
                }
            }).next();
}

From source file:org.springframework.web.reactive.socket.client.StandardWebSocketClient.java

private Mono<Void> executeInternal(URI url, HttpHeaders requestHeaders, WebSocketHandler handler) {
    MonoProcessor<Void> completionMono = MonoProcessor.create();
    return Mono.fromCallable(() -> {
        if (logger.isDebugEnabled()) {
            logger.debug("Connecting to " + url);
        }/*www.  j av a 2s .c  o m*/
        List<String> protocols = handler.getSubProtocols();
        DefaultConfigurator configurator = new DefaultConfigurator(requestHeaders);
        Endpoint endpoint = createEndpoint(url, handler, completionMono, configurator);
        ClientEndpointConfig config = createEndpointConfig(configurator, protocols);
        return this.webSocketContainer.connectToServer(endpoint, config, url);
    }).subscribeOn(Schedulers.elastic()) // connectToServer is blocking
            .then(completionMono);
}

From source file:org.springframework.web.reactive.socket.client.UndertowWebSocketClient.java

private Mono<Void> executeInternal(URI url, HttpHeaders headers, WebSocketHandler handler) {
    MonoProcessor<Void> completion = MonoProcessor.create();
    return Mono.fromCallable(() -> {
        if (logger.isDebugEnabled()) {
            logger.debug("Connecting to " + url);
        }/* w ww. j a  v  a  2s.  c om*/
        List<String> protocols = handler.getSubProtocols();
        ConnectionBuilder builder = createConnectionBuilder(url);
        DefaultNegotiation negotiation = new DefaultNegotiation(protocols, headers, builder);
        builder.setClientNegotiation(negotiation);
        return builder.connect().addNotifier(new IoFuture.HandlingNotifier<WebSocketChannel, Object>() {
            @Override
            public void handleDone(WebSocketChannel channel, Object attachment) {
                handleChannel(url, handler, completion, negotiation, channel);
            }

            @Override
            public void handleFailed(IOException ex, Object attachment) {
                completion.onError(new IllegalStateException("Failed to connect to " + url, ex));
            }
        }, null);
    }).then(completion);
}

From source file:org.springframework.web.reactive.socket.client.WebSocketClientSupport.java

protected List<String> beforeHandshake(URI url, HttpHeaders requestHeaders, WebSocketHandler handler) {
    if (logger.isDebugEnabled()) {
        logger.debug("Executing handshake to " + url);
    }//from   w  w w.  ja v a  2s  .co  m
    return handler.getSubProtocols();
}

From source file:org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService.java

@Nullable
private String selectProtocol(HttpHeaders headers, WebSocketHandler handler) {
    String protocolHeader = headers.getFirst(SEC_WEBSOCKET_PROTOCOL);
    if (protocolHeader != null) {
        List<String> supportedProtocols = handler.getSubProtocols();
        for (String protocol : StringUtils.commaDelimitedListToStringArray(protocolHeader)) {
            if (supportedProtocols.contains(protocol)) {
                return protocol;
            }/* w w w .j av  a  2 s . co m*/
        }
    }
    return null;
}