remove tcp boilerplate, integrate with http

This commit is contained in:
Daniel
2024-10-23 19:41:38 +03:00
parent e3541e84cc
commit 388caf3519
4 changed files with 59 additions and 74 deletions

View File

@@ -1,7 +1,6 @@
package org.lumijiez; package org.lumijiez;
import org.lumijiez.core.http.HttpServer; import org.lumijiez.core.http.HttpServer;
import org.lumijiez.logging.Logger;
public class Main { public class Main {
public static void main(String[] args) { public static void main(String[] args) {

View File

@@ -1,20 +1,29 @@
package org.lumijiez.core.http; package org.lumijiez.core.http;
import org.lumijiez.core.routing.Router; import org.lumijiez.core.routing.Router;
import org.lumijiez.core.tcp.TcpServer; import org.lumijiez.logging.Logger;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class HttpServer extends TcpServer { public class HttpServer {
private boolean running;
private final int port;
private ServerSocket serverSocket;
private final ExecutorService threadPool;
private final Router router; private final Router router;
public HttpServer(int port) { public HttpServer(int port) {
super(port); this.running = false;
this.port = port;
this.router = new Router(); this.router = new Router();
this.threadPool = Executors.newCachedThreadPool();
} }
public void GET(String path, HttpHandler handler) { public void GET(String path, HttpHandler handler) {
@@ -25,7 +34,33 @@ public class HttpServer extends TcpServer {
router.addRoute("POST", path, handler); router.addRoute("POST", path, handler);
} }
@Override public void start() {
try {
serverSocket = new ServerSocket(port);
running = true;
Logger.info("HTTP", "Server started on port " + port);
while (running) {
try {
Socket clientSocket = serverSocket.accept();
Logger.info("HTTP", "Client connected " + clientSocket.getInetAddress());
threadPool.submit(() -> handleClient(clientSocket));
} catch (IOException e) {
if (running) {
Logger.error("HTTP", "Error accepting client connection: " + e.getMessage());
}
}
}
} catch (IOException e) {
Logger.error("HTTP", "Error starting server: " + e.getMessage());
} finally {
stop();
}
}
protected void handleClient(Socket clientSocket) { protected void handleClient(Socket clientSocket) {
try (BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); try (BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true)) { PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true)) {
@@ -35,7 +70,24 @@ public class HttpServer extends TcpServer {
router.handleRequest(request, response); router.handleRequest(request, response);
} catch (IOException e) { } catch (IOException e) {
System.out.println("Error handling client: " + e.getMessage()); Logger.error("HTTP", "Error handling client: " + e.getMessage());
} }
} }
public void stop() {
running = false;
if (serverSocket != null) {
try {
serverSocket.close();
Logger.info("HTTP", "Server stopped");
} catch (IOException e) {
Logger.error("HTTP", "Error stopping server: " + e.getMessage());
}
}
threadPool.shutdownNow();
}
public boolean isRunning() {
return running;
}
} }

View File

@@ -1,66 +0,0 @@
package org.lumijiez.core.tcp;
import org.lumijiez.logging.Logger;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public abstract class TcpServer {
private final int port;
private boolean running;
private ServerSocket serverSocket;
private final ExecutorService threadPool;
public TcpServer(int port) {
this.port = port;
this.running = false;
this.threadPool = Executors.newCachedThreadPool();
}
public void start() {
try {
serverSocket = new ServerSocket(port);
running = true;
System.out.println("Server started on port " + port);
while (running) {
try {
Socket clientSocket = serverSocket.accept();
System.out.println("New client connected: " + clientSocket.getInetAddress());
threadPool.submit(() -> handleClient(clientSocket));
} catch (IOException e) {
if (running) {
System.out.println("Error accepting client connection: " + e.getMessage());
}
}
}
} catch (IOException e) {
System.out.println("Error starting server: " + e.getMessage());
} finally {
stop();
}
}
protected abstract void handleClient(Socket clientSocket);
public void stop() {
running = false;
if (serverSocket != null) {
try {
serverSocket.close();
System.out.println("Server stopped.");
} catch (IOException e) {
System.out.println("Error stopping server: " + e.getMessage());
}
}
threadPool.shutdownNow();
}
public boolean isRunning() {
return running;
}
}

View File

@@ -4,7 +4,7 @@ import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
public class Logger { public class Logger {
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
public enum LogLevel { public enum LogLevel {
DEBUG, INFO, WARN, ERROR DEBUG, INFO, WARN, ERROR
@@ -25,7 +25,7 @@ public class Logger {
public void log(LogLevel level, String source, String message) { public void log(LogLevel level, String source, String message) {
if (level.ordinal() >= currentLogLevel.ordinal()) { if (level.ordinal() >= currentLogLevel.ordinal()) {
String timestamp = LocalDateTime.now().format(formatter); String timestamp = LocalDateTime.now().format(formatter);
System.out.println("[" + timestamp + "] [" + level + "] [" + source + "] " + message); System.out.println("[" + timestamp + "][" + level + "][" + source + "] " + message);
} }
} }