!752 !1002612 // javax.websocket + implementation (tyrus) import javax.websocket.*; p { S token = devChannelToken(); S url = "https://slack.com/api/rtm.start"; Map postData = litmap("token", token, "no_unreads", "1"); S data = doPost(postData, url); Map map = cast jsonDecode(data); //printStructure(map); S websocketURL = getString(map, "url"); print("Websocket URL: " + websocketURL); assertTrue(nempty(websocketURL)); // open websocket WebsocketClientEndpoint clientEndPoint = new WebsocketClientEndpoint(new URI(websocketURL)); clientEndPoint.addMessageHandler(new WebsocketClientEndpoint.MessageHandler() { public void handleMessage(String message) { print(">> " + message + " <<"); } }); // send message to websocket //clientEndPoint.sendMessage("{'event':'addChannel','channel':'ok_btccny_ticker'}"); // wait 10 seconds for messages from websocket sleepSeconds(10); } /** * @author Jiji_Sasidharan */ static class WebsocketClientEndpoint { Session userSession = null; private MessageHandler messageHandler; public WebsocketClientEndpoint(URI endpointURI) { try { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); container.connectToServer(this, endpointURI); } catch (Exception e) { throw new RuntimeException(e); } } /** * Callback hook for Connection open events. * * @param userSession the userSession which is opened. */ @OnOpen public void onOpen(Session userSession) { System.out.println("opening websocket"); this.userSession = userSession; } /** * Callback hook for Connection close events. * * @param userSession the userSession which is getting closed. * @param reason the reason for connection close */ @OnClose public void onClose(Session userSession, CloseReason reason) { System.out.println("closing websocket"); this.userSession = null; } /** * Callback hook for Message Events. This method will be invoked when a client send a message. * * @param message The text message */ @OnMessage public void onMessage(String message) { if (this.messageHandler != null) { this.messageHandler.handleMessage(message); } } /** * register message handler * * @param msgHandler */ public void addMessageHandler(MessageHandler msgHandler) { this.messageHandler = msgHandler; } /** * Send a message. * * @param message */ public void sendMessage(String message) { this.userSession.getAsyncRemote().sendText(message); } /** * Message handler. * * @author Jiji_Sasidharan */ public static interface MessageHandler { public void handleMessage(String message); } }