package net.jrtechs.www.server.old; import org.java_websocket.WebSocket; import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.server.WebSocketServer; import org.json.JSONObject; import java.net.InetSocketAddress; import java.util.HashSet; import java.util.Set; /** * Socket server which listens for clients * * @author Jeffery Russell 5-26-18 */ public class Server extends WebSocketServer { /** port to listen on **/ private static int TCP_PORT = 4444; /** clients connected to the server **/ private Set clients; /** * Initializes the server and creates an empty set of clients */ public Server() { super(new InetSocketAddress(TCP_PORT)); System.out.println(super.getAddress()); clients = new HashSet<>(); } @Override public void onOpen(WebSocket conn, ClientHandshake handshake) { System.out.println("New connection from " + conn.getRemoteSocketAddress().getAddress().getHostAddress()); } @Override public void onClose(WebSocket conn, int code, String reason, boolean remote) { this.removeClient(conn); System.out.println("Closed connection to " + conn.getRemoteSocketAddress().getAddress().getHostAddress()); } @Override public void onMessage(WebSocket conn, String message) { JSONObject object = new JSONObject(message); if(object.has("graph")) { for (Client client : clients) { if(client.getSocket() == conn) { return; } } Client newClient = new Client(conn, object.getString("id"), object.getInt("graph")); clients.add(newClient); newClient.start(); } else if(object.has("go")) { for(Client client: clients) { if(client.getSocket() == conn) { client.sendNextRequest(); } } } } @Override public void onError(WebSocket conn, Exception ex) { ex.printStackTrace(); if (conn != null) { clients.remove(conn); // do some thing if required } System.out.println("ERROR from " + conn.getRemoteSocketAddress() .getAddress().getHostAddress()); } @Override public void onStart() { } /** * Removes a client from the main list of clients * based on the websocket that needs to be removed. * * @param conn */ public void removeClient(WebSocket conn) { for(Client c: clients) { if(c.getSocket() == conn) { this.clients.remove(c); c.stop(); } } } /** * Starts the web socket server * * @param args */ public static void main(String[] args) { new Server().start(); } }