From e384df3bd4fd4448a1c1a3740a8b17e2df6d7d07 Mon Sep 17 00:00:00 2001 From: jrtechs Date: Sat, 26 May 2018 20:01:15 -0400 Subject: [PATCH] Started creating the server-client communication channel. --- .../java/net/jrtechs/www/client/index.html | 26 +++++ .../java/net/jrtechs/www/server/Client.java | 31 +++++ .../java/net/jrtechs/www/server/Server.java | 109 ++++++++++++++++++ 3 files changed, 166 insertions(+) create mode 100644 src/main/java/net/jrtechs/www/client/index.html create mode 100644 src/main/java/net/jrtechs/www/server/Client.java create mode 100644 src/main/java/net/jrtechs/www/server/Server.java diff --git a/src/main/java/net/jrtechs/www/client/index.html b/src/main/java/net/jrtechs/www/client/index.html new file mode 100644 index 0000000..dbf4942 --- /dev/null +++ b/src/main/java/net/jrtechs/www/client/index.html @@ -0,0 +1,26 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/net/jrtechs/www/server/Client.java b/src/main/java/net/jrtechs/www/server/Client.java new file mode 100644 index 0000000..c62f7dc --- /dev/null +++ b/src/main/java/net/jrtechs/www/server/Client.java @@ -0,0 +1,31 @@ +package net.jrtechs.www.server; + +import org.java_websocket.WebSocket; + +public class Client extends Thread +{ + + private WebSocket client; + + + + public Client(WebSocket client) + { + this.client = client; + } + + public void recievedMessage(String message) + { + + } + + public WebSocket getSocket() + { + return this.client; + } + + @Override + public void run() { + + } +} diff --git a/src/main/java/net/jrtechs/www/server/Server.java b/src/main/java/net/jrtechs/www/server/Server.java new file mode 100644 index 0000000..d5067ab --- /dev/null +++ b/src/main/java/net/jrtechs/www/server/Server.java @@ -0,0 +1,109 @@ +package net.jrtechs.www.server; + +import org.java_websocket.WebSocket; +import org.java_websocket.handshake.ClientHandshake; +import org.java_websocket.server.WebSocketServer; + +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)); + clients = new HashSet<>(); + } + + + @Override + public void onOpen(WebSocket conn, ClientHandshake handshake) + { + clients.add(new Client(conn)); + 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) + { + System.out.println("Message from client: " + message); + for (Client client : clients) + { + if(client.getSocket() == conn) + { + client.recievedMessage(message); + } + } + } + + @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()); + } + + + /** + * 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(); + } + +}