X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fclient%2FWebSocketEventClient.java;h=e8dd2fa523f4c2305e42b6fd21353ff93fc9a61e;hb=c9100383d67d1be4c5797f084169a3faf513f5fb;hp=aab806a46d1059b77f3ebc59a39bdcd020ca5529;hpb=b1a235695e876269172d9db401eb0a25af938a30;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/client/WebSocketEventClient.java b/org.argeo.cms/src/org/argeo/cms/client/WebSocketEventClient.java index aab806a46..e8dd2fa52 100644 --- a/org.argeo.cms/src/org/argeo/cms/client/WebSocketEventClient.java +++ b/org.argeo.cms/src/org/argeo/cms/client/WebSocketEventClient.java @@ -1,49 +1,60 @@ package org.argeo.cms.client; import java.net.URI; -import java.net.http.HttpClient; import java.net.http.WebSocket; import java.nio.ByteBuffer; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; +import java.util.concurrent.ExecutionException; /** Tests connectivity to the web socket server. */ -public class WebSocketEventClient { +public class WebSocketEventClient implements Runnable { - public static void main(String[] args) throws Exception { - if (args.length == 0) { - System.err.println("usage: java " + WebSocketEventClient.class.getName() + " "); - System.exit(1); - return; - } - URI uri = URI.create(args[0]); - WebSocket.Listener listener = new WebSocket.Listener() { + private final URI uri; - public CompletionStage onText(WebSocket webSocket, CharSequence message, boolean last) { - System.out.println(message); - CompletionStage res = CompletableFuture.completedStage(message.toString()); - return res; - } + private WebSocket webSocket; - @Override - public CompletionStage onPong(WebSocket webSocket, ByteBuffer message) { - // System.out.println("Pong received."); - return null; - } + private CmsClient cmsClient; - }; + public WebSocketEventClient(URI uri) { + this.uri = uri; + cmsClient = new CmsClient(uri); + } + + @Override + public void run() { + try { + CompletableFuture ws = cmsClient.newWebSocket(new WsEventListener()); - HttpClient client = HttpClient.newHttpClient(); - CompletableFuture ws = client.newWebSocketBuilder().buildAsync(uri, listener); - WebSocket webSocket = ws.get(); - webSocket.request(Long.MAX_VALUE); + WebSocket webSocket = ws.get(); + webSocket.request(Long.MAX_VALUE); - Runtime.getRuntime().addShutdownHook(new Thread(() -> webSocket.sendClose(WebSocket.NORMAL_CLOSURE, ""))); + Runtime.getRuntime().addShutdownHook(new Thread(() -> webSocket.sendClose(WebSocket.NORMAL_CLOSURE, ""))); - while (!webSocket.isInputClosed()) { - webSocket.sendPing(ByteBuffer.allocate(0)); - Thread.sleep(10000); + while (!webSocket.isInputClosed()) { + webSocket.sendPing(ByteBuffer.allocate(0)); + Thread.sleep(10000); + } + } catch (InterruptedException e) { + if (webSocket != null) + webSocket.sendClose(WebSocket.NORMAL_CLOSURE, ""); + } catch (ExecutionException e) { + throw new RuntimeException("Cannot listent to " + uri, e.getCause()); } } + private class WsEventListener implements WebSocket.Listener { + public CompletionStage onText(WebSocket webSocket, CharSequence message, boolean last) { + System.out.println(message); + CompletionStage res = CompletableFuture.completedStage(message.toString()); + return res; + } + + @Override + public CompletionStage onPong(WebSocket webSocket, ByteBuffer message) { + // System.out.println("Pong received."); + return null; + } + + } }