]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/client/WebSocketEventClient.java
FS utils throws IOException
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / client / WebSocketEventClient.java
1 package org.argeo.cms.client;
2
3 import java.net.URI;
4 import java.net.http.WebSocket;
5 import java.nio.ByteBuffer;
6 import java.util.concurrent.CompletableFuture;
7 import java.util.concurrent.CompletionStage;
8 import java.util.concurrent.ExecutionException;
9
10 /** Tests connectivity to the web socket server. */
11 public class WebSocketEventClient implements Runnable {
12
13 private final URI uri;
14
15 private WebSocket webSocket;
16
17 private CmsClient cmsClient;
18
19 public WebSocketEventClient(URI uri) {
20 this.uri = uri;
21 cmsClient = new CmsClient(uri);
22 }
23
24 @Override
25 public void run() {
26 try {
27 CompletableFuture<WebSocket> ws = cmsClient.newWebSocket(new WsEventListener());
28
29 WebSocket webSocket = ws.get();
30 webSocket.request(Long.MAX_VALUE);
31
32 Runtime.getRuntime().addShutdownHook(new Thread(() -> webSocket.sendClose(WebSocket.NORMAL_CLOSURE, "")));
33
34 while (!webSocket.isInputClosed()) {
35 webSocket.sendPing(ByteBuffer.allocate(0));
36 Thread.sleep(10000);
37 }
38 } catch (InterruptedException e) {
39 if (webSocket != null)
40 webSocket.sendClose(WebSocket.NORMAL_CLOSURE, "");
41 } catch (ExecutionException e) {
42 throw new RuntimeException("Cannot listent to " + uri, e.getCause());
43 }
44 }
45
46 private class WsEventListener implements WebSocket.Listener {
47 public CompletionStage<?> onText(WebSocket webSocket, CharSequence message, boolean last) {
48 System.out.println(message);
49 CompletionStage<String> res = CompletableFuture.completedStage(message.toString());
50 return res;
51 }
52
53 @Override
54 public CompletionStage<?> onPong(WebSocket webSocket, ByteBuffer message) {
55 // System.out.println("Pong received.");
56 return null;
57 }
58
59 }
60 }