diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/ServerApp.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/ServerApp.java index a7814b0..702d1c8 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/ServerApp.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/ServerApp.java @@ -4,18 +4,21 @@ import ch.unibas.dmi.dbis.cs108.casono.server.network.NetworkManager; import ch.unibas.dmi.dbis.cs108.casono.server.network.events.DisconnectEvent; import ch.unibas.dmi.dbis.cs108.casono.server.network.events.EventBus; import ch.unibas.dmi.dbis.cs108.casono.server.network.sessions.SessionManager; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; -/** - * Application class for starting the server. - */ +/** Application class for starting the server. */ public class ServerApp { public static void start(String arg) { int port = Integer.parseInt(arg); - System.out.println("You've selected the server. It will accept connections at port " + port); + + Logger logger = LogManager.getLogger(ServerApp.class); + logger.info("Starting server at port {}", port); EventBus eventBus = new EventBus(); SessionManager sessionManager = new SessionManager(); - eventBus.subscribe(DisconnectEvent.class, event -> sessionManager.removeSession(event.sessionId())); + eventBus.subscribe( + DisconnectEvent.class, event -> sessionManager.removeSession(event.sessionId())); NetworkManager networkManager = new NetworkManager(port, sessionManager, eventBus); networkManager.start(); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/NetworkManager.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/NetworkManager.java index 50b53d9..ad2e5b3 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/NetworkManager.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/NetworkManager.java @@ -1,21 +1,17 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network; -import java.io.IOException; -import java.net.ServerSocket; -import java.net.Socket; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - import ch.unibas.dmi.dbis.cs108.casono.server.network.events.DisconnectEvent; import ch.unibas.dmi.dbis.cs108.casono.server.network.events.EventBus; import ch.unibas.dmi.dbis.cs108.casono.server.network.sessions.Session; import ch.unibas.dmi.dbis.cs108.casono.server.network.sessions.SessionManager; import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.TcpTransport; +import java.io.IOException; +import java.net.ServerSocket; +import java.net.Socket; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; -/** - * Creates and manages the server socket. Accepts new incoming connections and creates sessions. - */ +/** Creates and manages the server socket. Accepts new incoming connections and creates sessions. */ public class NetworkManager implements Runnable { private Integer port; private Logger logger; @@ -27,9 +23,9 @@ public class NetworkManager implements Runnable { /** * Creates a new NetworkManager with the given port, session manager, and event bus. * - * @param port the port to listen on + * @param port the port to listen on * @param sessionManager the session manager to use - * @param eventBus the event bus for events + * @param eventBus the event bus for events */ public NetworkManager(Integer port, SessionManager sessionManager, EventBus eventBus) { this.port = port; @@ -41,11 +37,9 @@ public class NetworkManager implements Runnable { this.eventBus.subscribe(DisconnectEvent.class, event -> clientDisconnected(event)); } - /** - * Starts the internal thread to accept new connections. - */ + /** Starts the internal thread to accept new connections. */ public void start() { - logger.debug("Starting server at port " + port); + logger.debug("Starting at port {}", port); thread.start(); } @@ -55,19 +49,17 @@ public class NetworkManager implements Runnable { * @param event the disconnect event */ public void clientDisconnected(DisconnectEvent event) { - logger.info("Session " + event.sessionId().value() + " disconnected adhasghd"); + logger.info("Session {} disconnected", event.sessionId().value()); } - /** - * Runs the network manager loop, accepting connections. - */ + /** Runs the network manager loop, accepting connections. */ @Override public void run() { try (ServerSocket serverSocket = new ServerSocket(port)) { while (running) { Socket clientSocket = serverSocket.accept(); - - System.out.println("Accepted connection from " + clientSocket.getRemoteSocketAddress()); + + logger.debug("Accepted connection from {}", clientSocket.getRemoteSocketAddress()); Session session = new Session(new TcpTransport(clientSocket), eventBus); sessionManager.addSession(session); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/events/DisconnectEvent.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/events/DisconnectEvent.java index b6b0d78..a866d56 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/events/DisconnectEvent.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/events/DisconnectEvent.java @@ -2,7 +2,5 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.events; import ch.unibas.dmi.dbis.cs108.casono.server.network.sessions.SessionId; -/** - * Represents a disconnect event for a session. - */ +/** Represents a disconnect event for a session. */ public record DisconnectEvent(SessionId sessionId) implements Event {} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/events/Event.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/events/Event.java index 75c0954..1a8fc4b 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/events/Event.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/events/Event.java @@ -1,6 +1,4 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.events; -/** - * Marker interface for events in the event bus system. - */ +/** Marker interface for events in the event bus system. */ interface Event {} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/events/EventBus.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/events/EventBus.java index 4141ab8..eb4293d 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/events/EventBus.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/events/EventBus.java @@ -7,9 +7,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Consumer; -/** - * A simple event bus for publishing and subscribing to events. - */ +/** A simple event bus for publishing and subscribing to events. */ public class EventBus { private final Map, List>> handlers = new ConcurrentHashMap<>(); @@ -17,9 +15,11 @@ public class EventBus { * Subscribes a handler to a specific event type. * * @param eventType the class of the event to subscribe to - * @param handler the consumer to handle the event + * @param handler the consumer to handle the event */ - @SuppressWarnings("unchecked") // This cast is safe, because handlers only get passed the type they subscribed to + @SuppressWarnings( + "unchecked") // This cast is safe, because handlers only get passed the type they + // subscribed to public void subscribe(Class eventType, Consumer handler) { handlers.computeIfAbsent(eventType, k -> new CopyOnWriteArrayList<>()) .add((Consumer) (Consumer) handler); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/Session.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/Session.java index d2464f1..3ed8f88 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/Session.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/Session.java @@ -1,17 +1,14 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.sessions; +import ch.unibas.dmi.dbis.cs108.casono.server.network.events.DisconnectEvent; +import ch.unibas.dmi.dbis.cs108.casono.server.network.events.EventBus; +import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.TransportLayer; import java.io.EOFException; import java.io.IOException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import ch.unibas.dmi.dbis.cs108.casono.server.network.events.DisconnectEvent; -import ch.unibas.dmi.dbis.cs108.casono.server.network.events.EventBus; -import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.TransportLayer; - -/** - * Represents a client session in the network server. - */ +/** Represents a client session in the network server. */ public class Session implements Runnable { private SessionId id; private Thread thread; @@ -19,12 +16,12 @@ public class Session implements Runnable { private Logger logger; private Boolean running; private EventBus eventBus; - + /** * Creates a new Session with the given transport and event bus. * * @param transport the transport layer for communication - * @param eventBus the event bus for publishing events + * @param eventBus the event bus for publishing events * @throws IOException if an I/O error occurs during initialization */ public Session(TransportLayer transport, EventBus eventBus) throws IOException { @@ -47,9 +44,7 @@ public class Session implements Runnable { return this.id; } - /** - * Starts the session thread. - */ + /** Starts the session thread. */ public void start() { thread.start(); } @@ -64,14 +59,12 @@ public class Session implements Runnable { this.running = false; } - /** - * Runs the session loop, reading from the transport. - */ + /** Runs the session loop, reading from the transport. */ @Override public void run() { while (running) { try { - System.out.println("Recieved: " + transport.read()); + logger.debug("Recieved: {}", transport.read()); } catch (EOFException e) { logger.info("Client disconnected"); eventBus.publish(new DisconnectEvent(id)); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionId.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionId.java index 431ebdc..2645323 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionId.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionId.java @@ -2,15 +2,11 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.sessions; import java.util.UUID; -/** - * Represents a unique identifier for a session. - */ +/** Represents a unique identifier for a session. */ public class SessionId { private final UUID value; - /** - * Creates a new SessionId with a randomly generated UUID. - */ + /** Creates a new SessionId with a randomly generated UUID. */ public SessionId() { this.value = UUID.randomUUID(); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionManager.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionManager.java index 42bc4ac..6702543 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionManager.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionManager.java @@ -3,15 +3,11 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.sessions; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -/** - * Manages active sessions in the server. - */ +/** Manages active sessions in the server. */ public class SessionManager { private Map sessions; - /** - * Constructs a new SessionManager. - */ + /** Constructs a new SessionManager. */ public SessionManager() { this.sessions = new ConcurrentHashMap<>(); } @@ -23,7 +19,6 @@ public class SessionManager { */ public void addSession(Session session) { sessions.put(session.getId(), session); - System.out.println("Added session " + session.getId().value() + " to session manager"); } /** @@ -33,7 +28,6 @@ public class SessionManager { * @return the removed session, or null if not found */ public Session removeSession(SessionId id) { - System.out.println("Removed session " + id.value() + " from session manager"); return sessions.remove(id); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/transport/TcpTransport.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/transport/TcpTransport.java index 3f80d6c..a7867d3 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/transport/TcpTransport.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/transport/TcpTransport.java @@ -6,9 +6,7 @@ import java.io.IOException; import java.net.Socket; import java.nio.charset.StandardCharsets; -/** - * Implements TCP-based transport layer for network communication. - */ +/** Implements TCP-based transport layer for network communication. */ public class TcpTransport implements TransportLayer { private Socket socket; private DataInputStream in; @@ -49,7 +47,7 @@ public class TcpTransport implements TransportLayer { byte[] rawPayload = payload.getBytes(StandardCharsets.UTF_8); out.writeInt(rawPayload.length); out.write(rawPayload); - out.flush(); + out.flush(); } /** diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/transport/TransportLayer.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/transport/TransportLayer.java index f487a9c..4bd9e36 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/transport/TransportLayer.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/transport/TransportLayer.java @@ -2,9 +2,7 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.transport; import java.io.IOException; -/** - * Interface for transport layer implementations. - */ +/** Interface for transport layer implementations. */ public interface TransportLayer { /** * Reads data from the transport layer.