Система событий

This commit is contained in:
RoyceDa
2026-02-02 22:38:46 +02:00
parent bbc83c7d39
commit bb01add104
13 changed files with 338 additions and 13 deletions

View File

@@ -20,23 +20,56 @@ public class Server extends WebSocketServer {
private PacketManager packetManager;
private Settings settings;
private ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private Object attachment;
private Context context;
private ServerListener listener;
public Server(Settings settings, PacketManager packetManager, Object attachment) {
/**
* Конструктор сервера
* @param settings базовые настройки серверера
* @param packetManager менеджер пакетов (обработчиков и зарегистрированных пакетов)
*/
public Server(Settings settings, PacketManager packetManager) {
super(new InetSocketAddress(settings.port));
this.settings = settings;
this.packetManager = packetManager;
this.attachment = attachment;
}
/**
* Конструктор сервера с объектом прикрепления
* @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;
}
public Server(Settings settings, PacketManager packetManager, Context context, ServerListener listener) {
super(new InetSocketAddress(settings.port));
this.settings = settings;
this.packetManager = packetManager;
this.context = context;
this.listener = listener;
}
@Override
public void onClose(WebSocket arg0, int arg1, String arg2, boolean arg3) {
public void onClose(WebSocket socket, int arg1, String arg2, boolean arg3) {
if(this.listener == null){
return;
}
this.listener.onClientDisconnect(this, socket.getAttachment());
}
@Override
public void onError(WebSocket arg0, Exception arg1) {
if(this.listener == null){
return;
}
this.listener.onError(this, arg1);
}
@Override
@@ -47,6 +80,12 @@ public class Server extends WebSocketServer {
*/
Client client = socket.getAttachment();
client.updateHeartbeat();
if(this.listener != null) {
/**
* Сообщение от клиента, но пакет не сформирован, передаем null
*/
this.listener.onPacketReceived(this, client, null);
}
}
@Override
@@ -90,7 +129,13 @@ public class Server extends WebSocketServer {
Class<? extends PacketExecutor> executorClass = this.packetManager.getExecutors().get(packetId);
PacketExecutor executor = executorClass.getConstructor().newInstance();
executor.settings = this.settings;
executor.attachment = this.attachment;
executor.context = this.context;
if(listener != null && listener.onPacketReceived(this, client, packet)) {
/**
* Если слушатель сервера вернул true, пакет не обрабатываем.
*/
return;
}
executor.onPacketReceived(packet, client);
} catch (Exception e) {
System.out.println("Error while processing packet " + packetClass.getName());
@@ -107,6 +152,13 @@ public class Server extends WebSocketServer {
*/
Client client = new Client(socket, this.settings.heartbeatInterval);
socket.setAttachment(client);
if(this.listener == null){
return;
}
if(this.listener.onClientConnect(this, client)) {
client.disconnect(ServerFailures.SERVER_NOT_ACCEPT_CLIENT);
return;
}
}
@Override
@@ -118,6 +170,10 @@ public class Server extends WebSocketServer {
int port = this.getPort();
System.out.println("\u001B[32mServer started at x.x.x.x:" + port + "\u001B[0m");
if(this.listener == null){
return;
}
this.listener.onServerStart(this);
}
/**