Обновленеи протокола, убран legacy код, переход на более практичную схему TLV

This commit is contained in:
RoyceDa
2026-04-18 17:49:58 +02:00
parent 9432969cb4
commit 068492b56d
20 changed files with 1353 additions and 528 deletions

View File

@@ -13,11 +13,11 @@ import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
import io.orprotocol.client.Client;
import io.orprotocol.frame.FrameDecoder;
import io.orprotocol.index.ClientIndexer;
import io.orprotocol.lock.ThreadLocker;
import io.orprotocol.packet.Packet;
import io.orprotocol.packet.PacketExecutor;
import io.orprotocol.packet.PacketFactory;
import io.orprotocol.packet.PacketManager;
public class Server extends WebSocketServer {
@@ -104,9 +104,9 @@ public class Server extends WebSocketServer {
/**
* Создаем пакет из полученных байтов.
*/
PacketFactory packetFactory = new PacketFactory(bytes, this.packetManager);
Packet packet = packetFactory.createPacket();
int packetId = packetFactory.getPacketId();
FrameDecoder frameDecoder = new FrameDecoder(bytes, client, this.packetManager);
Packet packet = frameDecoder.decode();
int packetId = packet.packetId;
/**
* Получаем обработчик пакета и вызываем его метод обработки.
*
@@ -127,7 +127,7 @@ public class Server extends WebSocketServer {
if(listener != null && !listener.onPacketReceived(this, client, packet)) {
/**
* Если слушатель сервера вернул false, пакет не обрабатываем.
*/
*/
return;
}
/**
@@ -162,6 +162,13 @@ public class Server extends WebSocketServer {
* Если клиент не отправляет heartbeat в указанный интервал, его можно отключить.
*/
Client client = new Client(socket, this.settings.heartbeatInterval, this);
/**
* Устанавливаем версию клиента
*/
client.setVersion(this.extractVersionFromHandshake(handshake));
/**
* Получаем адрес клиента
*/
String ipAddress = handshake.getFieldValue("X-Forwarded-For");
if (ipAddress == null || ipAddress.isEmpty()) {
ipAddress = socket.getRemoteSocketAddress().getAddress().getHostAddress();
@@ -182,6 +189,23 @@ public class Server extends WebSocketServer {
}
}
/**
* Версия передается в адресной строке при подключении клиента, например ws://.../?v=1,
* если версия не передана - возвращается первая версия по умолчанию (1)
* @param handshake
*/
private int extractVersionFromHandshake(ClientHandshake handshake) {
String versionStr = handshake.getFieldValue("v");
if(versionStr == null || versionStr.isEmpty()) {
return 1;
}
try {
return Integer.parseInt(versionStr);
} catch (NumberFormatException e) {
return 1;
}
}
@Override
public void onStart() {
/**