From ae435c848610da13f7bc664fe67c83f8ab842335 Mon Sep 17 00:00:00 2001 From: Royce59 Date: Sat, 21 Feb 2026 15:19:50 +0200 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=B4=D0=B2=D0=BE?= =?UTF-8?q?=D0=B9=D0=BD=D1=8B=D1=85=20=D1=83=D0=B2=D0=B5=D0=B4=D0=BE=D0=BC?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=BF=D1=80=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20=D1=83=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/im/rosetta/Boot.java | 2 +- .../executors/Executor24DeviceResolve.java | 33 ++++++++++++++----- .../service/services/BufferService.java | 11 +++++++ 3 files changed, 37 insertions(+), 9 deletions(-) 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);