]> git.argeo.org Git - lgpl/argeo-commons.git/blob - WebSocketEventClient.java
5834bd611da137cb4192cd76b8d7572f7eb7b8b6
[lgpl/argeo-commons.git] / WebSocketEventClient.java
1 package org.argeo.cms.client;
2
3 import java.net.URI;
4 import java.net.URL;
5 import java.net.http.HttpClient;
6 import java.net.http.WebSocket;
7 import java.nio.ByteBuffer;
8 import java.util.concurrent.CompletableFuture;
9 import java.util.concurrent.CompletionStage;
10
11 import javax.security.auth.login.LoginContext;
12
13 import org.argeo.cms.auth.RemoteAuthUtils;
14 import org.argeo.util.http.HttpHeader;
15
16 /** Tests connectivity to the web socket server. */
17 public class WebSocketEventClient {
18
19 public static void main(String[] args) throws Exception {
20 if (args.length == 0) {
21 System.err.println("usage: java " + WebSocketEventClient.class.getName() + " <url>");
22 System.exit(1);
23 return;
24 }
25 URI uri = URI.create(args[0]);
26 WebSocket.Listener listener = new WebSocket.Listener() {
27
28 public CompletionStage<?> onText(WebSocket webSocket, CharSequence message, boolean last) {
29 System.out.println(message);
30 CompletionStage<String> res = CompletableFuture.completedStage(message.toString());
31 return res;
32 }
33
34 @Override
35 public CompletionStage<?> onPong(WebSocket webSocket, ByteBuffer message) {
36 // System.out.println("Pong received.");
37 return null;
38 }
39
40 };
41
42 // SPNEGO
43 URL jaasUrl = SpnegoHttpClient.class.getResource("jaas.cfg");
44 System.setProperty("java.security.auth.login.config", jaasUrl.toExternalForm());
45 LoginContext lc = new LoginContext("SINGLE_USER");
46 lc.login();
47 String token = RemoteAuthUtils.getGssToken(lc.getSubject(), "HTTP", uri.getHost());
48
49 HttpClient client = HttpClient.newHttpClient();
50 CompletableFuture<WebSocket> ws = client.newWebSocketBuilder()
51 .header(HttpHeader.AUTHORIZATION.getName(), HttpHeader.NEGOTIATE + " " + token)
52 .buildAsync(uri, listener);
53
54 WebSocket webSocket = ws.get();
55 webSocket.request(Long.MAX_VALUE);
56
57 Runtime.getRuntime().addShutdownHook(new Thread(() -> webSocket.sendClose(WebSocket.NORMAL_CLOSURE, "")));
58
59 while (!webSocket.isInputClosed()) {
60 webSocket.sendPing(ByteBuffer.allocate(0));
61 Thread.sleep(10000);
62 }
63 }
64
65 }