public DaemonMessagesClientEndpoint( String host, String port, boolean ssl, MessageEventService messageEventService ) throws KettleException { try { setAuthProperties(); String url = String.format( URL_TEMPLATE, ( ssl ? PRFX_WS_SSL : PRFX_WS ), host, port ); URI uri = new URI( url ); this.messageEventService = messageEventService; WebSocketContainer container = ContainerProvider.getWebSocketContainer(); container.connectToServer( this, ClientEndpointConfig.Builder.create() .encoders( Collections.singletonList( MessageEncoder.class ) ) .decoders( Collections.singletonList( MessageDecoder.class ) ) .configurator( new SessionConfigurator( uri, keytab, principal ) ) .build(), uri ); } catch ( Exception e ) { throw new KettleException( e ); } }
@Override protected ListenableFuture<WebSocketSession> doHandshakeInternal(WebSocketHandler webSocketHandler, HttpHeaders headers, final URI uri, List<String> protocols, List<WebSocketExtension> extensions, Map<String, Object> attributes) { int port = getPort(uri); InetSocketAddress localAddress = new InetSocketAddress(getLocalHost(), port); InetSocketAddress remoteAddress = new InetSocketAddress(uri.getHost(), port); final StandardWebSocketSession session = new StandardWebSocketSession(headers, attributes, localAddress, remoteAddress); final ClientEndpointConfig endpointConfig = ClientEndpointConfig.Builder.create() .configurator(new StandardWebSocketClientConfigurator(headers)) .preferredSubprotocols(protocols) .extensions(adaptExtensions(extensions)).build(); endpointConfig.getUserProperties().putAll(getUserProperties()); final Endpoint endpoint = new StandardWebSocketHandlerAdapter(webSocketHandler, session); Callable<WebSocketSession> connectTask = () -> { this.webSocketContainer.connectToServer(endpoint, endpointConfig, uri); return session; }; if (this.taskExecutor != null) { return this.taskExecutor.submitListenable(connectTask); } else { ListenableFutureTask<WebSocketSession> task = new ListenableFutureTask<>(connectTask); task.run(); return task; } }
public void run() { try { final ClientEndpointConfig cec = ClientEndpointConfig.Builder.create().build(); final KafkaJSONMessageDecoder decoder = new KafkaJSONMessageDecoder(); decoder.init(null, schema, null);
@Override protected ListenableFuture<WebSocketSession> doHandshakeInternal(WebSocketHandler webSocketHandler, HttpHeaders headers, final URI uri, List<String> protocols, List<WebSocketExtension> extensions, Map<String, Object> attributes) { int port = getPort(uri); InetSocketAddress localAddress = new InetSocketAddress(getLocalHost(), port); InetSocketAddress remoteAddress = new InetSocketAddress(uri.getHost(), port); final StandardWebSocketSession session = new StandardWebSocketSession(headers, attributes, localAddress, remoteAddress); final ClientEndpointConfig endpointConfig = ClientEndpointConfig.Builder.create() .configurator(new StandardWebSocketClientConfigurator(headers)) .preferredSubprotocols(protocols) .extensions(adaptExtensions(extensions)).build(); endpointConfig.getUserProperties().putAll(getUserProperties()); final Endpoint endpoint = new StandardWebSocketHandlerAdapter(webSocketHandler, session); Callable<WebSocketSession> connectTask = () -> { webSocketContainer.connectToServer(endpoint, endpointConfig, uri); return session; }; if (this.taskExecutor != null) { return this.taskExecutor.submitListenable(connectTask); } else { ListenableFutureTask<WebSocketSession> task = new ListenableFutureTask<>(connectTask); task.run(); return task; } }
private RemoteEndpoint connectCommandExecutingClient(String webSocketBaseUrl, Optional<Consumer<String>> responseDataConsumer, String commandContext) throws InterruptedException, TimeoutException { RemoteEndpoint client = initializeDefault(); if (ResponseMode.TEXT.equals(responseMode)) { registerTextResponseConsumer(responseDataConsumer, client); } else if (ResponseMode.BINARY.equals(responseMode)) { registerBinaryResponseConsumer(responseDataConsumer, client); } else { //must be silent mode } String appendReadOnly = readOnly ? "/ro" : ""; String webSocketPath; if (ResponseMode.TEXT.equals(responseMode)) { webSocketPath = stripEndingSlash(webSocketBaseUrl) + RemoteEndpoint.WEB_SOCKET_TERMINAL_TEXT_PATH; } else if (ResponseMode.BINARY.equals(responseMode)) { webSocketPath = stripEndingSlash(webSocketBaseUrl) + RemoteEndpoint.WEB_SOCKET_TERMINAL_PATH; } else { webSocketPath = stripEndingSlash(webSocketBaseUrl) + RemoteEndpoint.WEB_SOCKET_TERMINAL_SILENT_PATH; } commandContext = formatCommandContext(commandContext); try { String websocketUrl = webSocketPath + commandContext + appendReadOnly; ClientEndpointConfig clientEndpointConfig = ClientEndpointConfig.Builder.create().build(); ContainerProvider.getWebSocketContainer().connectToServer(client, clientEndpointConfig, new URI(websocketUrl)); } catch (Exception e) { throw new AssertionError("Failed to connect to remote client.", e); } return client; }
@Override protected ListenableFuture<WebSocketSession> doHandshakeInternal(WebSocketHandler webSocketHandler, HttpHeaders headers, final URI uri, List<String> protocols, List<WebSocketExtension> extensions, Map<String, Object> attributes) { int port = getPort(uri); InetSocketAddress localAddress = new InetSocketAddress(getLocalHost(), port); InetSocketAddress remoteAddress = new InetSocketAddress(uri.getHost(), port); final StandardWebSocketSession session = new StandardWebSocketSession(headers, attributes, localAddress, remoteAddress); final ClientEndpointConfig endpointConfig = ClientEndpointConfig.Builder.create() .configurator(new StandardWebSocketClientConfigurator(headers)) .preferredSubprotocols(protocols) .extensions(adaptExtensions(extensions)).build(); endpointConfig.getUserProperties().putAll(getUserProperties()); final Endpoint endpoint = new StandardWebSocketHandlerAdapter(webSocketHandler, session); Callable<WebSocketSession> connectTask = () -> { this.webSocketContainer.connectToServer(endpoint, endpointConfig, uri); return session; }; if (this.taskExecutor != null) { return this.taskExecutor.submitListenable(connectTask); } else { ListenableFutureTask<WebSocketSession> task = new ListenableFutureTask<>(connectTask); task.run(); return task; } }
private static WebSocketClientEndpoint connect(WebSocketContainer webSocketContainer, XDIWebSocketClient xdiWebSocketClient, URI xdiWebSocketEndpointUri) throws Exception { // init websocket endpoint List<String> preferredSubprotocols = Arrays.asList(new String[] { "xdi" }); List<Extension> extensions = null; List<Class<? extends Encoder>> encoders = null; List<Class<? extends Decoder>> decoders = null; ClientEndpointConfig.Configurator clientEndpointConfigConfigurator = new ClientEndpointConfig.Configurator() { }; ClientEndpointConfig.Builder clientEndpointConfigBuilder = ClientEndpointConfig.Builder.create(); clientEndpointConfigBuilder.preferredSubprotocols(preferredSubprotocols); clientEndpointConfigBuilder.extensions(extensions); clientEndpointConfigBuilder.encoders(encoders); clientEndpointConfigBuilder.decoders(decoders); clientEndpointConfigBuilder.configurator(clientEndpointConfigConfigurator); ClientEndpointConfig clientEndpointConfig = clientEndpointConfigBuilder.build(); clientEndpointConfig.getUserProperties().put("xdiWebSocketClient", xdiWebSocketClient); clientEndpointConfig.getUserProperties().put("xdiWebSocketEndpointUri", xdiWebSocketEndpointUri); // connect websocket endpoint WebSocketClientEndpoint webSocketEndpoint = new WebSocketClientEndpoint(); Session session = webSocketContainer.connectToServer(webSocketEndpoint, clientEndpointConfig, URI.create(xdiWebSocketEndpointUri.toString())); webSocketEndpoint.setSession(session); // done log.info("Connected WebSocket endpoint for " + xdiWebSocketEndpointUri + " with preferred subprotocols " + preferredSubprotocols); return webSocketEndpoint; }
@Override public void connect() throws IOException { if (client == null) { client = ClientManager.createClient(); client.setDefaultMaxSessionIdleTimeout(-1); } try { final ClientEndpointConfig cec = ClientEndpointConfig.Builder .create().build(); cec.getUserProperties().put("address", getAddress()); if (session != null) { disconnect(); } session = client.connectToServer(WebsocketEndpoint.class, cec, new URI(serverUrl + "?id=" + myId)); } catch (final DeploymentException e) { LOG.log(Level.WARNING, "Can't connect to server", e); } catch (final URISyntaxException e) { LOG.log(Level.WARNING, "Can't parse server address", e); } }
@Override public void start(ILifecycleProgressMonitor monitor) throws SiteWhereException { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); ClientEndpointConfig config = ClientEndpointConfig.Builder.create().configurator(new WebSocketConfigurator()) .build(); config.getUserProperties().put(PROP_EVENT_RECEIVER, this); try { session = container.connectToServer(getWebSocketClientClass(), config, URI.create(getWebSocketUrl())); } catch (DeploymentException e) { throw new SiteWhereException("Unable to connect to web socket.", e); } catch (IOException e) { throw new SiteWhereException("Unable to connect to web socket.", e); } }
/** * Returns a {@link ClientEndpointConfig} config that contains the headers * to be passed to the backend. * @since 0.14.0 */ private ClientEndpointConfig getClientEndpointConfig(final ServletUpgradeRequest req) { return ClientEndpointConfig.Builder.create().configurator( new ClientEndpointConfig.Configurator() { @Override public void beforeRequest(final Map<String, List<String>> headers) { /* Add request headers */ req.getHeaders().forEach(headers::putIfAbsent); } }).build(); }
/** * Returns a {@link ClientEndpointConfig} config that contains the headers * to be passed to the backend. * @since 0.14.0 */ private ClientEndpointConfig getClientEndpointConfig(final ServletUpgradeRequest req) { return ClientEndpointConfig.Builder.create().configurator( new ClientEndpointConfig.Configurator() { @Override public void beforeRequest(final Map<String, List<String>> headers) { /* Add request headers */ req.getHeaders().forEach(headers::putIfAbsent); } }).build(); }
@Override public void start(ILifecycleProgressMonitor monitor) throws SiteWhereException { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); ClientEndpointConfig config = ClientEndpointConfig.Builder.create().configurator(new WebSocketConfigurator()) .build(); config.getUserProperties().put(PROP_EVENT_RECEIVER, this); try { session = container.connectToServer(getWebSocketClientClass(), config, URI.create(getWebSocketUrl())); } catch (DeploymentException e) { throw new SiteWhereException("Unable to connect to web socket.", e); } catch (IOException e) { throw new SiteWhereException("Unable to connect to web socket.", e); } }
public Endpoint connect(String websocketUrl) throws Exception { ClientEndpointConfig clientEndpointConfig = ClientEndpointConfig.Builder.create().build(); ContainerProvider.getWebSocketContainer().connectToServer(endpoint, clientEndpointConfig, new URI(websocketUrl)); return endpoint; }
public Endpoint connect(String websocketUrl) throws Exception { ClientEndpointConfig clientEndpointConfig = ClientEndpointConfig.Builder.create().build(); ContainerProvider.getWebSocketContainer().connectToServer(endpoint, clientEndpointConfig, new URI(websocketUrl)); return endpoint; }
private ClientEndpointConfig buildClientConfig(ClientEndpointConfig.Configurator configurator) { ClientEndpointConfig config = ClientEndpointConfig.Builder.create() .configurator(configurator) .build(); if (trustSelfSignedCerts) { SSLContext sslContext = buildSslContext(); Map<String, Object> userProperties = config.getUserProperties(); userProperties.put(WsWebSocketContainer.SSL_CONTEXT_PROPERTY, sslContext); } return config; }
private ClientEndpointConfig createEndpointConfig(Configurator configurator, String[] subProtocols) { return ClientEndpointConfig.Builder.create() .configurator(configurator) .preferredSubprotocols(Arrays.asList(subProtocols)) .build(); }
public Endpoint connect(String websocketUrl) throws Exception { ClientEndpointConfig clientEndpointConfig = ClientEndpointConfig.Builder.create().build(); ContainerProvider.getWebSocketContainer().connectToServer(endpoint, clientEndpointConfig, new URI(websocketUrl)); return endpoint; }
private ClientEndpointConfig buildClientConfig(ClientEndpointConfig.Configurator configurator) { ClientEndpointConfig config = ClientEndpointConfig.Builder.create().configurator(configurator).build(); if (trustSelfSignedCerts) { SSLContext sslContext = buildSslContext(); Map<String, Object> userProperties = config.getUserProperties(); userProperties.put(WsWebSocketContainer.SSL_CONTEXT_PROPERTY, sslContext); } return config; }
private void initWebSocketSession(String url, int wsConnectionTimeout) throws Exception { CountDownLatch wsLatch = new CountDownLatch(1); ClientEndpointConfig cec = ClientEndpointConfig.Builder.create().build(); ClientManager client = ClientManager.createClient(); client.connectToServer(new Endpoint() { @Override public void onOpen(Session session, EndpointConfig endpointConfig) { wsSession = session; wsLatch.countDown(); } }, cec, new URI(url)); if (!wsLatch.await(wsConnectionTimeout, TimeUnit.SECONDS)) { throw new TimeoutException("Web socket connection timeout"); } }
private ClientEndpointConfig createEndpointConfig(Configurator configurator, List<String> subProtocols) { return ClientEndpointConfig.Builder.create() .configurator(configurator) .preferredSubprotocols(subProtocols) .build(); }