Улучшена передача контекста (не нарушается принцип ответственности), добавлено логгирование, переработан Boot который собирает все древо приложения, улучшен протокол
This commit is contained in:
@@ -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);
|
||||
}));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user