From 5625acb4be5771fba1b590d66cd7f3d0f4ee0a94 Mon Sep 17 00:00:00 2001 From: RoyceDa Date: Fri, 20 Mar 2026 20:09:17 +0200 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0=20=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=20=D0=B2=20=D1=83=D0=B2=D0=B5?= =?UTF-8?q?=D0=B4=D0=BE=D0=BC=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/dispatch/FirebaseDispatcher.java | 20 ++++++++++++++++--- .../service/dispatch/MessageDispatcher.java | 18 +++++++++++++---- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/main/java/im/rosetta/service/dispatch/FirebaseDispatcher.java b/src/main/java/im/rosetta/service/dispatch/FirebaseDispatcher.java index 90dd72c..b08fe04 100644 --- a/src/main/java/im/rosetta/service/dispatch/FirebaseDispatcher.java +++ b/src/main/java/im/rosetta/service/dispatch/FirebaseDispatcher.java @@ -110,15 +110,29 @@ public class FirebaseDispatcher { * @param title заголовок уведомления * @param messageText текст уведомления */ - public void sendPushNotification(List publicKeys, String title, String messageText) { + public void sendPushNotification(List publicKeys, String title, String messageText, String senderPublicKey) { executor.submit(() -> { for (String publicKey : publicKeys) { - sendPushNotificationSync(publicKey, title, messageText); + sendPushNotificationSync(publicKey, title, messageText, senderPublicKey); } }); } - private void sendPushNotificationSync(String publicKey, String title, String messageText) { + /** + * Отправляет push-уведомление нескольким пользователям (асинхронно) + * @param publicKeys список публичных ключей пользователей + * @param title заголовок уведомления + * @param messageText текст уведомления + */ + public void sendPushNotification(List publicKeys, String title, String messageText) { + executor.submit(() -> { + for (String publicKey : publicKeys) { + sendPushNotificationSync(publicKey, title, messageText, null); + } + }); + } + + private void sendPushNotificationSync(String publicKey, String title, String messageText, String senderPublicKey) { try { List tokens = userService.getNotificationsTokens(publicKey); if (tokens == null || tokens.isEmpty()) { diff --git a/src/main/java/im/rosetta/service/dispatch/MessageDispatcher.java b/src/main/java/im/rosetta/service/dispatch/MessageDispatcher.java index f646872..8ab4efc 100644 --- a/src/main/java/im/rosetta/service/dispatch/MessageDispatcher.java +++ b/src/main/java/im/rosetta/service/dispatch/MessageDispatcher.java @@ -4,13 +4,15 @@ import java.util.List; import im.rosetta.client.ClientManager; import im.rosetta.client.tags.ECIAuthentificate; +import im.rosetta.database.entity.User; import im.rosetta.database.repository.BufferRepository; import im.rosetta.database.repository.GroupRepository; +import im.rosetta.database.repository.UserRepository; import im.rosetta.packet.Packet11Typeing; import im.rosetta.packet.Packet7Read; import im.rosetta.packet.base.PacketBaseDialog; import im.rosetta.service.services.BufferService; - +import im.rosetta.service.services.UserService; import io.orprotocol.ProtocolException; import io.orprotocol.client.Client; import io.orprotocol.packet.PacketManager; @@ -29,6 +31,8 @@ public class MessageDispatcher { private final BufferRepository bufferRepository = new BufferRepository(); private final BufferService bufferService; private final FirebaseDispatcher firebaseDispatcher = new FirebaseDispatcher(); + private final UserRepository userRepository = new UserRepository(); + private final UserService userService = new UserService(userRepository); public MessageDispatcher(ClientManager clientManager, PacketManager packetManager) { this.clientManager = clientManager; @@ -101,7 +105,7 @@ public class MessageDispatcher { /** * Отправляем PUSH уведомление */ - this.firebaseDispatcher.sendPushNotification(groupMembersPublicKeys, "Rosetta", "New message in group"); + this.firebaseDispatcher.sendPushNotification(groupMembersPublicKeys, "Rosetta", "New message in group", toPublicKey.replace("#group:", "")); } /** @@ -115,7 +119,13 @@ public class MessageDispatcher { public void sendPeer(PacketBaseDialog packet, Client client, boolean bufferizationNeed) throws ProtocolException { String fromPublicKey = packet.getFromPublicKey(); String toPublicKey = packet.getToPublicKey(); - + User user = this.userService.fromClient(client); + if(user == null){ + /** + * Если пользователь не найден, то не отправляем сообщение, так как у нас нет информации о том, кто отправляет сообщение + */ + return; + } /** * Ретранслируем сообщение ВСЕМ авторизованным сессиям отправителя КРОМЕ текущей, * чтобы синхронизировать отправленные сообщения @@ -154,7 +164,7 @@ public class MessageDispatcher { /** * Отправляем PUSH уведомление получателю */ - this.firebaseDispatcher.sendPushNotification(toPublicKey, "Rosetta", "New message"); + this.firebaseDispatcher.sendPushNotification(toPublicKey, user.getTitle(), "New message"); } /**