diff --git a/src/main/java/im/rosetta/Boot.java b/src/main/java/im/rosetta/Boot.java index 06ecd29..4cbdfcc 100644 --- a/src/main/java/im/rosetta/Boot.java +++ b/src/main/java/im/rosetta/Boot.java @@ -203,7 +203,7 @@ public class Boot { this.packetManager.registerExecutor(20, new Executor20GroupJoin()); this.packetManager.registerExecutor(21, new Executor21GroupLeave()); this.packetManager.registerExecutor(22, new Executor22GroupBan()); - this.packetManager.registerExecutor(24, new Executor24DeviceResolve(this.clientManager, this.eventManager)); + this.packetManager.registerExecutor(24, new Executor24DeviceResolve(this.clientManager, this.eventManager, this.packetManager)); this.packetManager.registerExecutor(25, new Executor25Sync(this.packetManager)); } diff --git a/src/main/java/im/rosetta/executors/Executor24DeviceResolve.java b/src/main/java/im/rosetta/executors/Executor24DeviceResolve.java index 3554ba4..4dfa263 100644 --- a/src/main/java/im/rosetta/executors/Executor24DeviceResolve.java +++ b/src/main/java/im/rosetta/executors/Executor24DeviceResolve.java @@ -6,7 +6,9 @@ import im.rosetta.Failures; import im.rosetta.client.ClientManager; import im.rosetta.client.tags.ECIAuthentificate; import im.rosetta.client.tags.ECIDevice; +import im.rosetta.database.entity.Buffer; import im.rosetta.database.entity.Device; +import im.rosetta.database.repository.BufferRepository; import im.rosetta.database.repository.DeviceRepository; import im.rosetta.event.EventManager; import im.rosetta.event.events.handshake.HandshakeCompletedEvent; @@ -15,10 +17,11 @@ import im.rosetta.packet.Packet24DeviceResolve; import im.rosetta.packet.runtime.DeviceSolution; import im.rosetta.packet.runtime.HandshakeStage; import im.rosetta.service.dispatch.DeviceDispatcher; - +import im.rosetta.service.services.BufferService; import io.orprotocol.ProtocolException; import io.orprotocol.client.Client; import io.orprotocol.packet.PacketExecutor; +import io.orprotocol.packet.PacketManager; public class Executor24DeviceResolve extends PacketExecutor { @@ -26,11 +29,14 @@ public class Executor24DeviceResolve extends PacketExecutor { */ public void deletePacketsFromBuffer(String to, Packet packet, long fromTimestampMs) { int packetId = this.packetManager.getPacketIdByClass(packet.getClass()); + this.deletePacketsFromBuffer(to, packetId, fromTimestampMs); + } + + /** + * Удаляет из буфера все пакеты для определенного клиента с публичным ключом to, которые были добавлены + * в буфер после fromTimestampMs и имееют такой же ID пакета как и переданный + * @param to публичный ключ получателя пакета + * @param packetId ID пакета, который нужно удалить + * @param fromTimestampMs метка времени в миллисекундах, после которой были добавлены пакеты, которые нужно удалить + */ + public void deletePacketsFromBuffer(String to, int packetId, long fromTimestampMs){ String hql = "DELETE FROM Buffer WHERE to = :to AND packetId = :packetId AND timestamp > :timestamp"; HashMap parameters = new HashMap<>(); parameters.put("to", to);