Example usage for io.vertx.core.http ServerWebSocket uri

List of usage examples for io.vertx.core.http ServerWebSocket uri

Introduction

In this page you can find the example usage for io.vertx.core.http ServerWebSocket uri.

Prototype

String uri();

Source Link

Usage

From source file:io.advantageous.qbit.vertx.http.server.VertxServerUtils.java

License:Apache License

public WebSocket createWebSocket(final ServerWebSocket vertxServerWebSocket) {

    final MultiMap<String, String> params = paramMap(vertxServerWebSocket);

    final MultiMap<String, String> headers = vertxServerWebSocket.headers().size() == 0 ? MultiMap.empty()
            : new MultiMapWrapper(vertxServerWebSocket.headers());

    /* Create a websocket that uses vertxServerWebSocket to forwardEvent messages. */
    final WebSocket webSocket = webSocketBuilder().setUri(vertxServerWebSocket.uri())
            .setRemoteAddress(vertxServerWebSocket.remoteAddress().toString())
            .setWebSocketSender(new WebSocketSender() {
                @Override//from  ww  w .j av a2  s  .c o m
                public void sendText(String message) {
                    vertxServerWebSocket.writeFinalTextFrame(message);
                }

                @Override
                public void sendBytes(byte[] message) {
                    vertxServerWebSocket.writeFinalBinaryFrame(Buffer.buffer(message));
                }

                @Override
                public void close() {
                    vertxServerWebSocket.close();
                }
            }).setHeaders(headers).setParams(params).build();

    /* Handle open. */
    webSocket.onOpen();

    /* Handle close. */
    vertxServerWebSocket.closeHandler(event -> webSocket.onClose());

    final Buffer[] bufferRef = new Buffer[1];

    final int[] count = new int[1];

    /* Handle frame. */
    vertxServerWebSocket.frameHandler(event -> {

        count[0]++;

        if (event.isFinal()) {
            //If the count is 1 then all of the data is in bufferRef, else all of the data but the last bit is in bufferRef.
            final Buffer finalBuffer = count[0] > 1 ? createNewBuffer(bufferRef[0], event.binaryData())
                    : event.binaryData();
            if (event.isBinary()) {
                ((NetSocketBase) webSocket).setBinary();
                webSocket.onBinaryMessage(finalBuffer.getBytes());
            } else {
                webSocket.onTextMessage(finalBuffer.toString("UTF-8"));
            }

            count[0] = 0;
            bufferRef[0] = null;
        } else {
            bufferRef[0] = createNewBuffer(bufferRef[0], event.binaryData());
        }
    });

    /* Handle error. */
    vertxServerWebSocket.exceptionHandler(event -> {
        if (event instanceof Exception) {
            webSocket.onError((Exception) event);
        } else {
            webSocket.onError(new Exception(event));
        }
    });

    return webSocket;
}

From source file:org.wisdom.framework.vertx.WebSocketHandler.java

License:Apache License

/**
 * Handles a web socket connection.//from  www  .  jav  a  2s . c  o  m
 *
 * @param socket the opening socket.
 */
@Override
public void handle(final ServerWebSocket socket) {
    LOGGER.info("New web socket connection {}, {}", socket, socket.uri());

    if (!configuration.accept(socket.uri())) {
        LOGGER.warn("Web Socket connection denied on {} by {}", socket.uri(), configuration.name());
        return;
    }

    final Socket sock = new Socket(socket);
    accessor.getDispatcher().addSocket(socket.path(), sock);

    socket.closeHandler(event -> {
        LOGGER.info("Web Socket closed {}, {}", socket, socket.uri());
        accessor.getDispatcher().removeSocket(socket.path(), sock);
    });

    socket.handler(event -> accessor.getDispatcher().received(socket.path(), event.getBytes(), sock));

}