/** * {@inheritDoc} */ @Override public void close() { status = Socket.STATUS.CLOSE; if (closed.getAndSet(true)) return; if (options.reconnectTimeoutInMilliseconds() <= 0 && !options.reconnect()) { timer.shutdown(); } TransportsUtil.invokeFunction(CLOSE, decoders, functions, String.class, CLOSE.name(), CLOSE.name(), resolver); if (webSocket != null && webSocket.isOpen()) webSocket.close(); futureDone(); }
/** * {@inheritDoc} */ @Override public void close() { status = Socket.STATUS.CLOSE; if (closed.getAndSet(true)) return; if (options.reconnectTimeoutInMilliseconds() <= 0 && !options.reconnect()) { timer.shutdown(); } TransportsUtil.invokeFunction(CLOSE, decoders, functions, String.class, CLOSE.name(), CLOSE.name(), resolver); if (webSocket != null && webSocket.isOpen()) webSocket.close(); futureDone(); }
@Test(timeOut = 60000) public void onCloseWithCode() throws Throwable { try (AsyncHttpClient client = getAsyncHttpClient(null)) { final CountDownLatch latch = new CountDownLatch(1); final AtomicReference<String> text = new AtomicReference<>(""); WebSocket websocket = client.prepareGet(getTargetUrl()).execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new Listener(latch, text)).build()).get(); websocket.close(); latch.await(); assertTrue(text.get().startsWith("1000")); } }
@Test(timeOut = 60000) public void onClose() throws Throwable { try (AsyncHttpClient client = getAsyncHttpClient(null)) { final CountDownLatch latch = new CountDownLatch(1); final AtomicReference<String> text = new AtomicReference<>(""); WebSocket websocket = client.prepareGet(getTargetUrl()).execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketListener() { @Override public void onOpen(com.ning.http.client.ws.WebSocket websocket) { } @Override public void onClose(com.ning.http.client.ws.WebSocket websocket) { text.set("OnClose"); latch.countDown(); } @Override public void onError(Throwable t) { t.printStackTrace(); latch.countDown(); } }).build()).get(); websocket.close(); latch.await(); assertEquals(text.get(), "OnClose"); } }
@Test(timeOut = 60000) public void testRedirectToWSResource() throws Exception { try (AsyncHttpClient client = getAsyncHttpClient(new AsyncHttpClientConfig.Builder().setFollowRedirect(true).build())) { final CountDownLatch latch = new CountDownLatch(1); final AtomicReference<String> text = new AtomicReference<>(""); WebSocket websocket = client.prepareGet(getRedirectURL()).execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketListener() { @Override public void onOpen(com.ning.http.client.ws.WebSocket websocket) { text.set("OnOpen"); latch.countDown(); } @Override public void onClose(com.ning.http.client.ws.WebSocket websocket) { } @Override public void onError(Throwable t) { t.printStackTrace(); latch.countDown(); } }).build()).get(); latch.await(); assertEquals(text.get(), "OnOpen"); websocket.close(); } }
public ClientEndpoint createFor ( AsyncHttpClient httpClient, String destination, MetricsCollector metricsCollector) { StreamCreatingWebSocketTextListener listener = new StreamCreatingWebSocketTextListener(); WebSocketUpgradeHandler webSocketUpgradeHandler =new WebSocketUpgradeHandler.Builder() .addWebSocketListener(listener) .build(); com.ning.http.client.ws.WebSocket underlyingWebSocket = openConnection(httpClient, destination, webSocketUpgradeHandler); WebSocket webSocket = createWebSocket(destination, underlyingWebSocket, metricsCollector); Function<com.ning.http.client.ws.WebSocket, WebSocket> webSocketFactory = rawSocket -> webSocket; EndpointStreamSource endpointStreamSource = EndpointStreamSourceFactory.createStreamSourceFor(destination, webSocketFactory, listener, metricsCollector); Consumer<CloseReason> closeAction = closeReason -> { if (underlyingWebSocket instanceof GrizzlyWebSocketAdapter) { GrizzlyWebSocketAdapter gwsa = (GrizzlyWebSocketAdapter) underlyingWebSocket; gwsa.getGrizzlyWebSocket().close(closeReason.code, closeReason.text); } else { underlyingWebSocket.close(); } listener.close(); }; return new ClientEndpoint(destination, endpointStreamSource, webSocket, closeAction, messageTranscriber, metricsCollector); }