/******************************************************************************* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2013,2014 by Peter Pilgrim, Addiscombe, Surrey, XeNoNiQUe UK * * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU GPL v3.0 * which accompanies this distribution, and is available at: * http://www.gnu.org/licenses/gpl-3.0.txt * * Developers: * Peter Pilgrim -- design, development and implementation * -- Blog: http://www.xenonique.co.uk/blog/ * -- Twitter: @peter_pilgrim * * Contributors: * *******************************************************************************/ package je7hb.websocket.basic; import javax.websocket.*; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; /** * The type EchoClientSenderEndpoint * * @author Peter Pilgrim */ public class EchoClientSenderEndpoint extends Endpoint { private CountDownLatch messageLatch; private String urlTemplateLink; private String receivedMessage; private String message; public EchoClientSenderEndpoint(String urlTemplateLink, String message) { this.urlTemplateLink = urlTemplateLink; this.message = message; } public void makeConnection() throws IOException, DeploymentException, URISyntaxException { messageLatch = new CountDownLatch(2); final ClientEndpointConfig config = ClientEndpointConfig.Builder.create().build(); System.out.printf("%s.makeConnection() config=%s\n", getClass().getSimpleName(), config); WebSocketContainer container = ContainerProvider.getWebSocketContainer(); System.out.printf("container=%s\n", container); container.connectToServer( this, config, new URI(urlTemplateLink) ); } @Override public void onOpen(Session session, EndpointConfig config) { final RemoteEndpoint.Basic remote = session.getBasicRemote(); System.out.printf("%s.onOpen( session = [%s], config = [%s] )\n", getClass().getSimpleName(), session, config); session.addMessageHandler(new MessageHandler.Whole<String>() { @Override public void onMessage(String message) { receivedMessage = message; messageLatch.countDown(); System.out.printf("%s.onMessage() receivedMessage=%s\n", getClass().getSimpleName(), receivedMessage); } }); try { session.getBasicRemote().sendText(message); messageLatch.countDown(); } catch (IOException e) { e.printStackTrace(System.err); } } public String getReceivedMessage(int milliseconds ) { try { messageLatch.await( milliseconds, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { e.printStackTrace(System.err); } return receivedMessage; } }