Миграция протокола
This commit is contained in:
31
src/main/java/io/orprotocol/packet/Packet.java
Normal file
31
src/main/java/io/orprotocol/packet/Packet.java
Normal 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);
|
||||
|
||||
}
|
||||
35
src/main/java/io/orprotocol/packet/PacketExecutor.java
Normal file
35
src/main/java/io/orprotocol/packet/PacketExecutor.java
Normal 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);
|
||||
}
|
||||
91
src/main/java/io/orprotocol/packet/PacketManager.java
Normal file
91
src/main/java/io/orprotocol/packet/PacketManager.java
Normal 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();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user