]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/client/WebSocketEventClient.java
1 package org
.argeo
.cms
.client
;
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
;
11 import javax
.security
.auth
.login
.LoginContext
;
13 import org
.argeo
.cms
.auth
.RemoteAuthUtils
;
14 import org
.argeo
.util
.http
.HttpHeader
;
16 /** Tests connectivity to the web socket server. */
17 public class WebSocketEventClient
{
19 public static void main(String
[] args
) throws Exception
{
20 if (args
.length
== 0) {
21 System
.err
.println("usage: java " + WebSocketEventClient
.class.getName() + " <url>");
25 URI uri
= URI
.create(args
[0]);
26 WebSocket
.Listener listener
= new WebSocket
.Listener() {
28 public CompletionStage
<?
> onText(WebSocket webSocket
, CharSequence message
, boolean last
) {
29 System
.out
.println(message
);
30 CompletionStage
<String
> res
= CompletableFuture
.completedStage(message
.toString());
35 public CompletionStage
<?
> onPong(WebSocket webSocket
, ByteBuffer message
) {
36 // System.out.println("Pong received.");
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");
47 String token
= RemoteAuthUtils
.getGssToken(lc
.getSubject(), "HTTP", uri
.getHost());
49 HttpClient client
= HttpClient
.newHttpClient();
50 CompletableFuture
<WebSocket
> ws
= client
.newWebSocketBuilder()
51 .header(HttpHeader
.AUTHORIZATION
.getName(), HttpHeader
.NEGOTIATE
+ " " + token
)
52 .buildAsync(uri
, listener
);
54 WebSocket webSocket
= ws
.get();
55 webSocket
.request(Long
.MAX_VALUE
);
57 Runtime
.getRuntime().addShutdownHook(new Thread(() -> webSocket
.sendClose(WebSocket
.NORMAL_CLOSURE
, "")));
59 while (!webSocket
.isInputClosed()) {
60 webSocket
.sendPing(ByteBuffer
.allocate(0));