You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package server.net;
import server.Main; import server.util.Queue;
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket;
public class ChatServer {
private final int port; private volatile int n_users; private final Thread t; private ServerSocket server; private Queue<Integer> id_q;
public ChatServer(int port, int max_users) { Main.console.info("Initializing server on port: " + port + " with max_users: " + max_users); this.port = port; n_users = 0; id_q = new Queue<>(max_users); for (int i = 0; i < max_users; ++i) id_q.enq(i); t = new Thread(() -> { try { while (true) { if (n_users == max_users) continue; Socket s = server.accept(); DataInputStream inputStream = new DataInputStream(s.getInputStream()); DataOutputStream outputStream = new DataOutputStream(s.getOutputStream()); ChatClient client = new ChatClient(id_q.deq(), s, inputStream, outputStream, this); n_users++; Main.console.success("Client (" + s.getRemoteSocketAddress().toString() + ") [id: " + client.id + "] connected!"); } } catch (IOException e) { Main.console.error("An error occurred while listening for connections!"); e.printStackTrace(); } }); }
public void start() { try { server = new ServerSocket(port); t.start(); } catch (Throwable e) { Main.console.error("An error occurred while starting the ChatServer!"); e.printStackTrace(); } }
public void stop() { try { t.stop(); } catch (Throwable e) { Main.console.error("An error occurred while stopping the ChatServer!"); e.printStackTrace(); } }
public void disconnect(ChatClient c) { c.disconnect(); id_q.enq(c.id); n_users--; Main.console.info("Disconnected client [id: " + c.id + "]"); } }
|