package net.fe.network; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import net.fe.Session; import net.fe.overworldStage.objective.Seize; public class Server { ServerSocket serverSocket; boolean closeRequested = false; volatile ArrayList<ServerListener> clients; public volatile ArrayList<Message> messages; public ServerLog log; private Session session; public boolean allowConnections; byte counter = 1; public Server() { messages = new ArrayList<Message>(); clients = new ArrayList<ServerListener>(); session = new Session(); session.setObjective(new Seize()); log = new ServerLog(); allowConnections = true; } public void start(int port) { try { serverSocket = new ServerSocket(port); System.out.println("SERVER: Waiting for connections..."); while(!closeRequested) { Socket connectSocket = serverSocket.accept(); System.out.println("SERVER: Connection #"+counter+" accepted!"); ServerListener listener = new ServerListener(this, connectSocket); clients.add(listener); listener.start(); counter++; } serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } /** * Sends a message to all clients * @param line */ public void broadcastMessage(Message message) { log.logMessage(message, true); for(ServerListener out : clients) { out.sendMessage(message); } } /** * Sends a message only to the given client * @param client * @param line */ public void sendMessage(ServerListener client, Message message) { log.logMessage(message, true); client.sendMessage(message); } public byte getCount() { return counter; } public Session getSession() { return session; } }