From b1b8e2b0a14fe5f11871f33378afe73d17b55b68 Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Mon, 9 Sep 2013 10:08:58 -0700 Subject: [PATCH] Adding Example for javax.websocket Client use --- .../websocket/jsr356/demo/ExampleClient.java | 57 +++++++++++++++ .../websocket/jsr356/demo/ExampleSocket.java | 71 +++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/demo/ExampleClient.java create mode 100644 jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/demo/ExampleSocket.java diff --git a/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/demo/ExampleClient.java b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/demo/ExampleClient.java new file mode 100644 index 00000000000..39f7e2ffbbc --- /dev/null +++ b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/demo/ExampleClient.java @@ -0,0 +1,57 @@ +// +// ======================================================================== +// Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.websocket.jsr356.demo; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.concurrent.TimeUnit; + +import javax.websocket.ContainerProvider; +import javax.websocket.DeploymentException; +import javax.websocket.Session; +import javax.websocket.WebSocketContainer; + +public class ExampleClient +{ + public static void main(String[] args) + { + try + { + new ExampleClient().run(); + } + catch (Throwable t) + { + t.printStackTrace(); + } + } + + private void run() throws DeploymentException, IOException, URISyntaxException, InterruptedException + { + WebSocketContainer container = ContainerProvider.getWebSocketContainer(); + ExampleSocket socket = new ExampleSocket(); + URI uri = new URI("ws://echo.websocket.org/"); + Session session = container.connectToServer(socket,uri); + socket.writeMessage("Hello"); + socket.messageLatch.await(1,TimeUnit.SECONDS); // give remote 1 second to respond + session.close(); + socket.closeLatch.await(1,TimeUnit.SECONDS); // give remote 1 second to acknowledge response + System.exit(0); + } +} diff --git a/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/demo/ExampleSocket.java b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/demo/ExampleSocket.java new file mode 100644 index 00000000000..c4d9cd4feb0 --- /dev/null +++ b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/demo/ExampleSocket.java @@ -0,0 +1,71 @@ +// +// ======================================================================== +// Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.websocket.jsr356.demo; + +import java.io.IOException; +import java.util.concurrent.CountDownLatch; + +import javax.websocket.ClientEndpoint; +import javax.websocket.CloseReason; +import javax.websocket.OnClose; +import javax.websocket.OnMessage; +import javax.websocket.OnOpen; +import javax.websocket.Session; + +@ClientEndpoint +public class ExampleSocket +{ + private Session session; + public CountDownLatch messageLatch = new CountDownLatch(1); + public CountDownLatch closeLatch = new CountDownLatch(1); + + @OnClose + public void onClose(CloseReason close) + { + System.out.printf("Closed: %d, \"%s\"%n",close.getCloseCode().getCode(),close.getReasonPhrase()); + closeLatch.countDown(); + } + + @OnMessage + public void onMessage(String message) + { + System.out.printf("Received: \"%s\"%n",message); + messageLatch.countDown(); + } + + @OnOpen + public void onOpen(Session session) + { + System.out.printf("Opened%n"); + this.session = session; + } + + public void writeMessage(String message) + { + System.out.printf("Writing: \"%s\"%n",message); + try + { + session.getBasicRemote().sendText(message); + } + catch (IOException e) + { + e.printStackTrace(); + } + } +}