Улучшена передача контекста (не нарушается принцип ответственности), добавлено логгирование, переработан Boot который собирает все древо приложения, улучшен протокол

This commit is contained in:
RoyceDa
2026-02-03 20:11:37 +02:00
parent 695ec9c520
commit cb5cafb8f6
12 changed files with 188 additions and 106 deletions

View File

@@ -23,7 +23,6 @@ public class Server extends WebSocketServer {
private PacketManager packetManager;
private Settings settings;
private ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private Context context;
private ServerListener listener;
private ThreadLocker threadLocker = new ThreadLocker();
@@ -38,33 +37,17 @@ public class Server extends WebSocketServer {
this.packetManager = packetManager;
}
/**
* Конструктор сервера с объектом прикрепления
* @param settings базовые настройки серверера
* @param packetManager менеджер пакетов (обработчиков и зарегистрированных пакетов)
* @param context вложение которое будет передаваться всем серрверным обработчикам пакетов,
* может быть использовано для передачи контекста приложения
*/
public Server(Settings settings, PacketManager packetManager, Context context) {
super(new InetSocketAddress(settings.port));
this.settings = settings;
this.packetManager = packetManager;
this.context = context;
}
/**
* Конструктор сервера с объектом прикрепления и слушателем событий сервера
* @param settings базовые настройки серверера
* @param packetManager менеджер пакетов (обработчиков и зарегистрированных пакетов)
* @param context вложение которое будет передаваться всем серрверным обработчикам пакетов,
* @param listener слушатель событий сервера
* может быть использовано для передачи контекста приложения
*/
public Server(Settings settings, PacketManager packetManager, Context context, ServerListener listener) {
public Server(Settings settings, PacketManager packetManager, ServerListener listener) {
super(new InetSocketAddress(settings.port));
this.settings = settings;
this.packetManager = packetManager;
this.context = context;
this.listener = listener;
}
@@ -138,10 +121,8 @@ public class Server extends WebSocketServer {
/**
* Получаем обработчик пакета и вызываем его метод обработки.
*/
Class<? extends PacketExecutor> executorClass = this.packetManager.getExecutors().get(packetId);
PacketExecutor executor = executorClass.getConstructor().newInstance();
PacketExecutor executor = this.packetManager.getExecutors().get(packetId);
executor.settings = this.settings;
executor.context = this.context;
if(listener != null && !listener.onPacketReceived(this, client, packet)) {
/**
* Если слушатель сервера вернул false, пакет не обрабатываем.
@@ -151,7 +132,7 @@ public class Server extends WebSocketServer {
/**
* Проверяем наличие блокировки для данного пакета и ключа в аннотации @Lock.
*/
if(!threadLocker.acquireLock(packet, executorClass)) {
if(!threadLocker.acquireLock(packet, executor.getClass())) {
/**
* Если блокировка уже существует, значит другой поток обрабатывает пакет
* с таким же значением lockFor, отклоняем текущий пакет.
@@ -164,7 +145,7 @@ public class Server extends WebSocketServer {
/**
* Снимаем блокировку после обработки пакета.
*/
threadLocker.releaseLock(packet, executorClass);
threadLocker.releaseLock(packet, executor.getClass());
}
} catch (Exception e) {
System.out.println("Error while processing packet " + packetClass.getName());
@@ -244,7 +225,6 @@ public class Server extends WebSocketServer {
/**
* Останавливаем сервер при завершении работы и вызываем слушатели остановки сервера.
*/
System.out.println("JVM Shutdown detected, stopping server...");
this.listener.onServerStop(this);
}));
}