From 421531d73c9e3d7104bebef4a321473bb89fd1a9 Mon Sep 17 00:00:00 2001 From: RoyceDa Date: Mon, 16 Feb 2026 13:53:29 +0200 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B1=D1=83=D1=84=D0=B5=D1=80=D0=BE?= =?UTF-8?q?=D0=B2,=20=D0=B8=D0=B7=D0=B1=D0=B5=D0=B6=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=D0=BA=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/services/BufferService.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/main/java/im/rosetta/service/services/BufferService.java b/src/main/java/im/rosetta/service/services/BufferService.java index f7fbaa3..313b848 100644 --- a/src/main/java/im/rosetta/service/services/BufferService.java +++ b/src/main/java/im/rosetta/service/services/BufferService.java @@ -9,6 +9,7 @@ import im.rosetta.database.QuerySession; import im.rosetta.database.entity.Buffer; import im.rosetta.database.repository.BufferRepository; import im.rosetta.exception.UnauthorizedExeception; +import im.rosetta.packet.Packet7Read; import im.rosetta.service.Service; import im.rosetta.service.services.runtime.PacketBuffer; import io.orprotocol.ProtocolException; @@ -71,6 +72,29 @@ public class BufferService extends Service { public void pushPacketToBuffer(String from, String to, Packet packet) { int packetId = this.packetManager.getPacketIdByClass(packet.getClass()); packet.packetId = packetId; + if(packet instanceof Packet7Read){ + /** + * Если это пакет чтения, то получаем последний пакет из буфера, если это уже чтение - то чтение больше не нужно + * записывать, так как эффект от нескольких пакетов чтения один и тот же, как и от одного, однако + * клиенты иногда порождают много пакетов чтения (на каждую загрузку диалога) + */ + String hql = "FROM Buffer WHERE from = :from AND to = :to ORDER BY timestamp DESC"; + HashMap parameters = new HashMap<>(); + parameters.put("from", from); + parameters.put("to", to); + try(QuerySession querySession = this.getRepository().buildQuery(hql, parameters)){ + List buffers = querySession.getQuery().setMaxResults(1).list(); + if(!buffers.isEmpty()){ + Buffer buffer = buffers.get(0); + if(buffer.getPacketId() == packetId){ + /** + * Последний пакет в буфере уже является пакетом чтения, значит нет смысла добавлять еще один + */ + return; + } + } + } + } byte[] packetBytes = packet.write().getBuffer(); Buffer buffer = new Buffer(); buffer.setFrom(from);