Миграция протокола

This commit is contained in:
RoyceDa
2026-02-02 05:30:38 +02:00
parent a05501fb80
commit bbc83c7d39
17 changed files with 36 additions and 32 deletions

View File

@@ -0,0 +1,31 @@
package io.orprotocol.packet;
import io.orprotocol.Stream;
/**
* Представляет собой абстрактный класс для всех пакетов, используемых в протоколе.
*/
public abstract class Packet {
public int packetId;
public PacketManager packetManager;
public Packet() {
}
/**
* Записывает данные пакета в поток. Исползуется при отправке
*
* @return Поток с записанными данными пакета.
*/
public abstract Stream write();
/**
* Читает данные пакета из потока. Используется при получении
*
* @param stream Поток с данными пакета.
*/
public abstract void read(Stream stream);
}

View File

@@ -0,0 +1,35 @@
package io.orprotocol.packet;
import io.orprotocol.Settings;
import io.orprotocol.client.Client;
/**
* Базовый класс для обработчиков пакетов.
*/
public abstract class PacketExecutor {
public Settings settings;
public Object attachment;
/**
* Настройки сервера.
* @return
*/
public Settings getSettings() {
return settings;
}
/**
* Вложенный обьект, который был передан при создании сервера.
* @return вложенный обьект
*/
public Object getAttachment() {
return attachment;
}
/**
* Вызывается при получении пакета от клиента.
* @param packet Пакет, полученный от клиента.
* @param client Клиент, отправивший пакет.
*/
public abstract void onPacketReceived(Packet packet, Client client);
}

View File

@@ -0,0 +1,91 @@
package io.orprotocol.packet;
import java.util.HashMap;
/**
* Менеджер сетевых пакетов и их обработчиков.
*/
public class PacketManager {
private HashMap<Integer, Class<? extends Packet>> packets;
private HashMap<Integer, Class<? extends PacketExecutor>> executors;
public PacketManager() {
this.packets = new HashMap<>();
this.executors = new HashMap<>();
}
/**
* Регистрирует пакет с указанным ID.
* @param packetId ID пакета
* @param packet Класс пакета
*/
public void registerPacket(int packetId, Class<? extends Packet> packet) {
this.packets.put(packetId, packet);
}
/**
* Проверяет, зарегистрирован ли обработчик для пакета с указанным ID.
* @param packetId ID пакета
* @return true, если обработчик зарегистрирован, иначе false.
*/
public boolean hasExecutorDelegated(int packetId) {
return this.executors.containsKey(packetId);
}
/**
* Проверяет, поддерживается ли пакет с указанным ID.
* @param packetId ID пакета
* @return true, если пакет поддерживается, иначе false.
*/
public boolean hasPacketSupported(int packetId) {
return this.packets.containsKey(packetId);
}
public HashMap<Integer, Class<? extends PacketExecutor>> getExecutors() {
return this.executors;
}
public Integer getPacketIdByClass(Class<? extends Packet> packetClass) {
for (var entry : this.packets.entrySet()) {
if (entry.getValue().equals(packetClass)) {
return entry.getKey();
}
}
return null;
}
public Class<? extends Packet> getPacketClass(int packetId) {
return this.packets.get(packetId);
}
/**
* Регистрирует обработчик пакета с указанным ID.
* @param packetId ID пакета
* @param executor Обработчик пакета
*/
public void registerExecutor(int packetId, Class <? extends PacketExecutor> executor) {
if (this.executors == null) {
this.executors = new HashMap<>();
}
this.executors.put(packetId, executor);
}
/**
* Возвращает общее количество зарегистрированных обработчиков пакетов.
* @return Количество обработчиков пакетов.
*/
public Integer totalExecutors() {
return this.executors.size();
}
/**
* Возвращает общее количество зарегистрированных пакетов.
* @return Количество пакетов.
*/
public Integer totalPackets() {
return this.packets.size();
}
}