X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fclient%2FWebSocketEventClient.java;h=ed20e95b271a7b7168ad43821fcf0fbf96b9896c;hb=5b6b49fa655c7b3ae3dcc06d6c504e3d0225684f;hp=294b485fb450668352baac32a63e457ebd30233d;hpb=fbdca9fcba285280f1d113671ef3ba7a670e45c7;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 294b485fb..ed20e95b2 100644 --- a/org.argeo.cms/src/org/argeo/cms/client/WebSocketEventClient.java +++ b/org.argeo.cms/src/org/argeo/cms/client/WebSocketEventClient.java @@ -7,59 +7,80 @@ import java.net.http.WebSocket; import java.nio.ByteBuffer; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; +import java.util.concurrent.ExecutionException; import javax.security.auth.login.LoginContext; +import javax.security.auth.login.LoginException; import org.argeo.cms.auth.RemoteAuthUtils; import org.argeo.util.http.HttpHeader; /** 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; + + public WebSocketEventClient(URI uri) { + this.uri = uri; + } - @Override - public CompletionStage onPong(WebSocket webSocket, ByteBuffer message) { - // System.out.println("Pong received."); - return null; - } + @Override + public void run() { + try { + WebSocket.Listener listener = new WebSocket.Listener() { - }; + public CompletionStage onText(WebSocket webSocket, CharSequence message, boolean last) { + System.out.println(message); + CompletionStage res = CompletableFuture.completedStage(message.toString()); + return res; + } - // SPNEGO - URL jaasUrl = SpnegoHttpClient.class.getResource("jaas-client-ipa.cfg"); - System.setProperty("java.security.auth.login.config", jaasUrl.toExternalForm()); - LoginContext lc = new LoginContext(SpnegoHttpClient.CLIENT_LOGIN_CONTEXT); - lc.login(); - String token = RemoteAuthUtils.createGssToken(lc.getSubject(), "HTTP", uri.getHost()); + @Override + public CompletionStage onPong(WebSocket webSocket, ByteBuffer message) { + // System.out.println("Pong received."); + return null; + } - HttpClient client = SpnegoHttpClient.openHttpClient(lc.getSubject()); - CompletableFuture ws = client.newWebSocketBuilder() - .header(HttpHeader.AUTHORIZATION.getHeaderName(), HttpHeader.NEGOTIATE + " " + token) - .buildAsync(uri, listener); + }; - WebSocket webSocket = ws.get(); - webSocket.request(Long.MAX_VALUE); + // SPNEGO + URL jaasUrl = SpnegoHttpClient.class.getResource("jaas-client-ipa.cfg"); + System.setProperty("java.security.auth.login.config", jaasUrl.toExternalForm()); + LoginContext lc = new LoginContext(SpnegoHttpClient.CLIENT_LOGIN_CONTEXT); + lc.login(); + String token = RemoteAuthUtils.createGssToken(lc.getSubject(), "HTTP", uri.getHost()); - Runtime.getRuntime().addShutdownHook(new Thread(() -> webSocket.sendClose(WebSocket.NORMAL_CLOSURE, ""))); + HttpClient client = SpnegoHttpClient.openHttpClient(lc.getSubject()); + CompletableFuture ws = client.newWebSocketBuilder() + .header(HttpHeader.AUTHORIZATION.getHeaderName(), HttpHeader.NEGOTIATE + " " + token) + .buildAsync(uri, listener); - while (!webSocket.isInputClosed()) { - webSocket.sendPing(ByteBuffer.allocate(0)); - Thread.sleep(10000); + WebSocket webSocket = ws.get(); + webSocket.request(Long.MAX_VALUE); + + Runtime.getRuntime().addShutdownHook(new Thread(() -> webSocket.sendClose(WebSocket.NORMAL_CLOSURE, ""))); + + while (!webSocket.isInputClosed()) { + webSocket.sendPing(ByteBuffer.allocate(0)); + Thread.sleep(10000); + } + }catch (InterruptedException e) { + if (webSocket != null) + webSocket.sendClose(WebSocket.NORMAL_CLOSURE, ""); + } catch (ExecutionException | LoginException e) { + throw new RuntimeException("Cannot listent to " + uri, e.getCause()); } } +// 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]); +// } + }