Сообщения, доставка сообщений, фикс хэндшейков, буферная зона (для синхронмзации)
This commit is contained in:
@@ -17,6 +17,7 @@ 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 {
|
||||
@@ -95,37 +96,13 @@ public class Server extends WebSocketServer {
|
||||
public void onMessage(WebSocket socket, ByteBuffer byteBuffer) {
|
||||
Client client = socket.getAttachment();
|
||||
byte[] bytes = byteBuffer.array();
|
||||
Stream stream = new Stream(bytes);
|
||||
int packetId = stream.readInt16();
|
||||
/**
|
||||
* Обновляем время последнего полученного heartbeat.
|
||||
* Так как клиент отпраивл нам пакет, он живой.
|
||||
*/
|
||||
client.updateHeartbeat();
|
||||
|
||||
if(!this.packetManager.hasPacketSupported(packetId)){
|
||||
/**
|
||||
* Если пакет не поддерживается, отключаем клиента с соответствующим кодом ошибки.
|
||||
*/
|
||||
client.disconnect(ServerFailures.UNSUPPORTED_PACKET);
|
||||
return;
|
||||
}
|
||||
if(!this.packetManager.hasExecutorDelegated(packetId)){
|
||||
/**
|
||||
* Если для пакета не назначен обработчик, отключаем клиента с соответствующим кодом ошибки.
|
||||
*/
|
||||
client.disconnect(ServerFailures.UNSUPPORTED_PACKET);
|
||||
return;
|
||||
}
|
||||
|
||||
Class<? extends Packet> packetClass = this.packetManager.getPacketClass(packetId);
|
||||
try {
|
||||
Packet packet = packetClass.getConstructor().newInstance();
|
||||
packet.packetId = packetId;
|
||||
/**
|
||||
* Читаем данные пакета из потока.
|
||||
* Создаем пакет из полученных байтов.
|
||||
*/
|
||||
packet.read(stream);
|
||||
PacketFactory packetFactory = new PacketFactory(bytes, this.packetManager);
|
||||
Packet packet = packetFactory.createPacket();
|
||||
int packetId = packetFactory.getPacketId();
|
||||
/**
|
||||
* Получаем обработчик пакета и вызываем его метод обработки.
|
||||
*
|
||||
@@ -161,8 +138,8 @@ public class Server extends WebSocketServer {
|
||||
threadLocker.releaseLock(packet, executor.getClass());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println("Error while processing packet " + packetClass.getName());
|
||||
e.printStackTrace();
|
||||
//client.disconnect(ServerFailures.UNSUPPORTED_PACKET);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user