package org.thingml.generated.network; import org.thingml.generated.messages.*; import org.thingml.java.*; import org.thingml.java.ext.*; import com.neovisionaries.ws.client.WebSocket; import com.neovisionaries.ws.client.WebSocketFactory; import com.neovisionaries.ws.client.WebSocketAdapter; import java.util.List; import java.util.Map; public class WSJava extends Component { private final /*$SERIALIZER$*/ formatter = new /*$SERIALIZER$*/(); private final WebSocketFactory factory = new WebSocketFactory(); private WebSocket ws; /*$PORTS$*/ public WSJava(String serverURL, String protocol) { try { ws = factory.createSocket(serverURL); ws.addProtocol(protocol); ws.addListener(new WebSocketAdapter() { @Override public void onTextMessage(WebSocket websocket, String message) throws Exception { parse(message); } @Override public void onConnected(WebSocket websocket, Map<String, List<String>> headers) throws Exception { /*$CALLBACK$*/ } }); } catch (Exception e) { System.err.println("Cannot connect to websocket server " + serverURL + " because " + e.getMessage()); stop(); } } private void parse(final String payload) { /*$PARSING CODE$*/ } @Override public Component init() { super.init(); try { ws.connect(); } catch (Exception e) { System.err.println("Cannot connect to websocket server because " + e.getMessage()); } return this; } @Override public void run() { while (active.get()) { try { final Event e = queue.take();//should block if queue is empty, waiting for a message final String payload = formatter.format(e); if (payload != null) ws.sendText(payload); } catch (InterruptedException e) { //e.printStackTrace(); } } } @Override public Component buildBehavior(String id, Component root) { /*$INIT PORTS$*/ final java.util.List < AtomicState > states = new java.util.ArrayList < AtomicState > (); final AtomicState init = new AtomicState("Init"); states.add(init); behavior = new CompositeState("default", states, init, java.util.Collections.EMPTY_LIST); return this; } }