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

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

Introduction

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

Prototype

@Nullable
String query();

Source Link

Usage

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

License:Apache License

private MultiMap<String, String> paramMap(ServerWebSocket vertxServerWebSocket) {
    String query = vertxServerWebSocket.query();
    MultiMap<String, String> paramMap = MultiMap.empty();

    if (!Str.isEmpty(query)) {
        final String[] params = StringScanner.split(query, '&');

        if (params.length > 0) {
            paramMap = new MultiMapImpl<>();

            for (String param : params) {
                final String[] keyValue = StringScanner.split(param, '=');

                if (keyValue.length == 2) {

                    String key = keyValue[0];
                    String value = keyValue[1];
                    try {
                        key = URLDecoder.decode(key, "UTF-8");
                        value = URLDecoder.decode(value, "UTF-8");
                        paramMap.add(key, value);
                    } catch (UnsupportedEncodingException e) {
                        logger.warn(sputs("Unable to url decode key or value in param", key, value), e);
                    }//  ww w.j  a v  a2  s . c  o m
                }
            }
        }
    }
    return paramMap;
}

From source file:org.atmosphere.vertx.AtmosphereCoordinator.java

License:Apache License

/**
 * Route the {@link ServerWebSocket} into the {@link AtmosphereFramework}
 *
 * @param webSocket the {@link ServerWebSocket}
 *//*from ww  w.  j a v  a2 s  .  c  om*/
public AtmosphereCoordinator route(ServerWebSocket webSocket) {
    Map<String, List<String>> paramMap = new QueryStringDecoder("?" + webSocket.query()).parameters();
    Map<String, String[]> params = new LinkedHashMap<String, String[]>(paramMap.size());
    for (Map.Entry<String, List<String>> entry : paramMap.entrySet()) {
        params.put(entry.getKey(), entry.getValue().toArray(new String[] {}));
    }

    String contentType = "application/json";
    if (params.size() == 0) {
        // TODO: vert.x trim the query string, unfortunately.
        params.put(X_ATMO_PROTOCOL, new String[] { "true" });
        params.put(X_ATMOSPHERE_FRAMEWORK, new String[] { "2.1" });
        params.put(X_ATMOSPHERE_TRACKING_ID, new String[] { "0" });
        params.put(X_ATMOSPHERE_TRANSPORT, new String[] { "websocket" });
        params.put("Content-Type", new String[] { contentType });
    } else if (params.containsKey("Content-Type") && params.get("Content-Type").length > 0) {
        contentType = params.get("Content-Type")[0];
    }

    AtmosphereRequest.Builder requestBuilder = new AtmosphereRequest.Builder();
    AtmosphereRequest r = requestBuilder.requestURI(webSocket.path())
            .requestURL("http://0.0.0.0" + webSocket.path()).contentType(contentType).pathInfo(webSocket.path())
            .queryStrings(params).build();

    final WebSocket w = new VertxWebSocket(framework.getAtmosphereConfig(), webSocket);
    try {
        webSocketProcessor.open(w, r, AtmosphereResponse.newInstance(framework.getAtmosphereConfig(), r, w));
    } catch (IOException e) {
        logger.debug("", e);
    }

    webSocket.handler(new Handler<Buffer>() {
        @Override
        public void handle(Buffer data) {
            webSocketProcessor.invokeWebSocketProtocol(w, data.toString());
        }
    });
    webSocket.exceptionHandler(new Handler<Throwable>() {
        @Override
        public void handle(Throwable event) {
            w.close();
            logger.debug("", event);
            webSocketProcessor.close(w, 1006);
        }
    });
    webSocket.closeHandler(new VoidHandler() {
        @Override
        protected void handle() {
            w.close();
            webSocketProcessor.close(w, 1005);
        }
    });
    return this;
}