package org.thingml.generated.network; import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.annotations.*; import java.nio.ByteBuffer; import java.util.*; @WebSocket public class JavaWSHandler { private static Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>()); //keep all active sessions to broadcast messages to all except the sender public JavaWSHandler(){} @OnWebSocketClose public void onClose(Session session, int statusCode, String reason) { synchronized (sessions) { sessions.remove(session); } } @OnWebSocketError public void onError(Session s, Throwable t) { System.out.println("Jetty WS Server error: " + t.getMessage() + " Disconnecting faulty session " + s); synchronized (sessions) { sessions.remove(s); } s.close(1, "Faulty session"); } @OnWebSocketConnect public void onConnect(Session session) { synchronized (sessions) { sessions.add(session); } } @OnWebSocketMessage public void onMessage(final Session session, final String message) { synchronized (sessions) { for (Session s : sessions) { if (!s.equals(session) && s.isOpen()) { s.getRemote().sendString(message, null); } } } } @OnWebSocketMessage public void onMessage(final Session session, final byte[] message, final int offset, final int length) { synchronized (sessions) { for (Session s : sessions) { if (!s.equals(session) && s.isOpen()) { s.getRemote().sendBytes(ByteBuffer.wrap(message), null); } } } } }