final AtomicReference<byte[]> text = new AtomicReference<>(null); WebSocket websocket = client.prepareGet(getTargetUrl()).execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketByteListener() { }).build()).get();
final AtomicReference<String> text = new AtomicReference<>(""); WebSocket websocket = client.prepareGet(getTargetUrl()).execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketTextListener() { latch.countDown(); }).addWebSocketListener(new WebSocketTextListener() { latch.countDown(); }).build()).get();
final AtomicReference<byte[]> text = new AtomicReference<>(null); WebSocket websocket = client.prepareGet(getTargetUrl()).execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketByteListener() { }).build()).get(); websocket.stream("ECHO".getBytes(), false); websocket.stream("ECHO".getBytes(), true);
final AtomicReference<byte[]> text = new AtomicReference<>(null); WebSocket websocket = client.prepareGet(getTargetUrl()).execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketByteListener() { }).build()).get();
final AtomicReference<String> text = new AtomicReference<>(""); final WebSocket websocket = client.prepareGet(getTargetUrl()).execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketTextListener() { closeLatch.countDown(); }).build()).get();
final AtomicReference<String> text = new AtomicReference<>(""); WebSocket websocket = asyncHttpClient.prepareGet(targetUrl).execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketTextListener() { latch.countDown(); }).build()).get();
public void echoFragments() 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 WebSocketTextListener() { @Override public void onMessage(String message) { text.set(message); latch.countDown(); } @Override public void onOpen(com.ning.http.client.ws.WebSocket websocket) { } @Override public void onClose(com.ning.http.client.ws.WebSocket websocket) { latch.countDown(); } @Override public void onError(Throwable t) { t.printStackTrace(); latch.countDown(); } }).build()).get(); websocket.stream("ECHO", false); websocket.stream("ECHO", true); latch.await(); assertEquals(text.get(), "ECHOECHO"); } }
@Test public void echoByte() throws Throwable { try (AsyncHttpClient client = getAsyncHttpClient(null)) { final CountDownLatch latch = new CountDownLatch(1); final AtomicReference<byte[]> text = new AtomicReference<>(new byte[0]); WebSocket websocket = client.prepareGet(getTargetUrl()).execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketByteListener() { @Override public void onOpen(WebSocket websocket) { } @Override public void onClose(WebSocket websocket) { latch.countDown(); } @Override public void onError(Throwable t) { t.printStackTrace(); latch.countDown(); } @Override public void onMessage(byte[] message) { text.set(message); latch.countDown(); } }).build()).get(); websocket.sendMessage("ECHO".getBytes()); latch.await(); assertEquals(text.get(), "ECHO".getBytes()); } }
final AtomicReference<Throwable> throwable = new AtomicReference<>(); client.prepareGet("ws://www.google.com/").execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketTextListener() { latch.countDown(); }).build());
@Test(timeOut = 60000, expectedExceptions = { IllegalStateException.class, IllegalArgumentException.class } ) public void wrongStatusCode() throws Throwable { try (AsyncHttpClient client = getAsyncHttpClient(null)) { final CountDownLatch latch = new CountDownLatch(1); final AtomicReference<Throwable> throwable = new AtomicReference<>(); client.prepareGet("http://apache.org").execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketTextListener() { @Override public void onMessage(String message) { } @Override public void onOpen(com.ning.http.client.ws.WebSocket websocket) { } @Override public void onClose(com.ning.http.client.ws.WebSocket websocket) { } @Override public void onError(Throwable t) { throwable.set(t); latch.countDown(); } }).build()); latch.await(); assertNotNull(throwable.get()); throw throwable.get(); } }
@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(); } }
@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 onTimeoutCloseTest() throws Throwable { try (AsyncHttpClient client = getAsyncHttpClient(null)) { final CountDownLatch latch = new CountDownLatch(1); final AtomicReference<String> text = new AtomicReference<>(""); 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(); latch.await(); assertEquals(text.get(), "OnClose"); } }
@Test public void echoTwoMessagesTest() throws Throwable { try (AsyncHttpClient client = getAsyncHttpClient(null)) { final CountDownLatch latch = new CountDownLatch(2); final AtomicReference<String> text = new AtomicReference<>(""); WebSocket websocket = client.prepareGet(getTargetUrl()).execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketTextListener() { @Override public void onMessage(String message) { text.set(text.get() + message); latch.countDown(); } @Override public void onOpen(com.ning.http.client.ws.WebSocket websocket) { websocket.sendMessage("ECHO").sendMessage("ECHO"); } @Override public void onClose(com.ning.http.client.ws.WebSocket websocket) { latch.countDown(); } @Override public void onError(Throwable t) { t.printStackTrace(); latch.countDown(); } }).build()).get(); latch.await(); assertEquals(text.get(), "ECHOECHO"); } }
@Test(timeOut = 60000) public void echoText() 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 WebSocketTextListener() { @Override public void onMessage(String message) { text.set(message); latch.countDown(); } @Override public void onOpen(com.ning.http.client.ws.WebSocket websocket) { } @Override public void onClose(com.ning.http.client.ws.WebSocket websocket) { latch.countDown(); } @Override public void onError(Throwable t) { t.printStackTrace(); latch.countDown(); } }).build()).get(); websocket.sendMessage("ECHO"); latch.await(); assertEquals(text.get(), "ECHO"); } }
@Test(timeOut = 60000) public void onOpen() throws Throwable { try (AsyncHttpClient client = getAsyncHttpClient(null)) { final CountDownLatch latch = new CountDownLatch(1); final AtomicReference<String> text = new AtomicReference<>(""); client.prepareGet(getTargetUrl()).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"); } }
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); }
@Test(timeOut = 60000, expectedExceptions = { ExecutionException.class }) public void getWebSocketThrowsException() throws Throwable { final CountDownLatch latch = new CountDownLatch(1); try (AsyncHttpClient client = getAsyncHttpClient(null)) { client.prepareGet("http://apache.org").execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketTextListener() { @Override public void onMessage(String message) { } @Override public void onOpen(com.ning.http.client.ws.WebSocket websocket) { } @Override public void onClose(com.ning.http.client.ws.WebSocket websocket) { } @Override public void onError(Throwable t) { latch.countDown(); } }).build()).get(); } latch.await(); }
@Test public void testNingWebSockets() throws Exception { logger.debug("START testNingWebSockets()"); String wsUrl = "ws://localhost:8081/websocket"; String wssUrl = "wss://localhost:8444/websocket"; AsyncHttpClient client = new AsyncHttpClient(); WebSocketUpgradeHandler handler = new WebSocketUpgradeHandler.Builder().addWebSocketListener(new ClientWebSocket()).build(); WebSocket websocket = client.prepareGet(wssUrl).execute(handler).get(); Assert.assertNotNull("No connection!", websocket); logger.debug("Connection made: " + websocket.isOpen()); websocket.sendMessage("TestMessage".getBytes()); Thread.sleep(1000); websocket.close(); logger.debug("END testNingWebSockets()"); }
@Test(timeOut = 60000, expectedExceptions = { ConnectException.class, UnresolvedAddressException.class, UnknownHostException.class }) public void onFailureTest() throws Throwable { try (AsyncHttpClient c = getAsyncHttpClient(null)) { c.prepareGet("ws://abcdefg").execute(new WebSocketUpgradeHandler.Builder().build()).get(); } catch (ExecutionException e) { if (e.getCause() != null) throw e.getCause(); else throw e; } }