From ddcd08aeaea7ec0c9a2464e32e5560c44341c5da Mon Sep 17 00:00:00 2001 From: RoyceDa Date: Tue, 7 Apr 2026 15:16:00 +0200 Subject: [PATCH] =?UTF-8?q?END=5FCALL=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D1=85=20=D1=83=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=B9=D1=81=D1=82=D0=B2=20=D0=BF=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D1=8F=D0=B2=D1=88=D0=B5=D0=B3=D0=BE=20=D0=B7=D0=B2=D0=BE=D0=BD?= =?UTF-8?q?=D0=BE=D0=BA=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/im/rosetta/client/ClientManager.java | 60 ++++++++++++++----- .../executors/Executor26SignalPeer.java | 7 +++ 2 files changed, 53 insertions(+), 14 deletions(-) diff --git a/src/main/java/im/rosetta/client/ClientManager.java b/src/main/java/im/rosetta/client/ClientManager.java index 2bc28fd..d40839e 100644 --- a/src/main/java/im/rosetta/client/ClientManager.java +++ b/src/main/java/im/rosetta/client/ClientManager.java @@ -56,9 +56,10 @@ public class ClientManager { * Отправить пакет ВСЕМ АВТОРИЗОВАННЫМ клиентам с публичным ключом publicKey * @param publicKey публичный ключ получателя * @param packet пакет для отправки + * @param exclude клиент, который не должен получать этот пакет, может быть null * @throws ProtocolException если произошла ошибка при отправке пакета клиенту */ - public void sendPacketToAuthorizedPK(String publicKey, Packet packet) throws ProtocolException { + public void sendPacketToAuthorizedPK(String publicKey, Packet packet, Client exclude) throws ProtocolException { Set clients = this.clientIndexer.getClients(ECIAuthentificate.class, "publicKey", publicKey); if(clients == null){ /** @@ -77,12 +78,55 @@ public class ClientManager { continue; } /** - * Отправляем пакет каждому клиенту с таким публичным ключом (то есть всем его авторизованным сессиям/устройствам) + * Отправляем пакет каждому клиенту с таким публичным ключом (то есть всем его авторизованным сессиям/устройствам), + * исключая клиента exclude */ + if(exclude != null && client.equals(exclude)){ + /** + * Этот клиент является исключением, он не должен получать этот пакет + */ + continue; + } client.send(packet); } } + /** + * Отправить пакет ВСЕМ АВТОРИЗОВАННЫМ клиентам с публичным ключом publicKey + * @param publicKey публичный ключ получателя + * @param packet пакет для отправки + * @throws ProtocolException если произошла ошибка при отправке пакета клиенту + */ + public void sendPacketToAuthorizedPK(String publicKey, Packet packet) throws ProtocolException { + this.sendPacketToAuthorizedPK(publicKey, packet, null); + } + + /** + * Отправить пакет всем клиентам с публичными ключами из списка publicKeys + * @param publicKeys список публичных ключей получателей + * @param packet пакет для отправки + * @param exclude клиент, который не должен получать этот пакет, может быть null + * @throws ProtocolException если произошла ошибка при отправке пакета клиенту + */ + public void sendPacketToAuthorizedPK(List publicKeys, Packet packet, Client exclude) throws ProtocolException { + for(String publicKey : publicKeys){ + this.sendPacketToAuthorizedPK(publicKey, packet, exclude); + } + } + + /** + * Отправить пакет всем клиентам с публичными ключами из списка publicKeys + * @param publicKeys список публичных ключей получателей + * @param packet пакет для отправки + * @throws ProtocolException если произошла ошибка при отправке пакета клиенту + */ + public void sendPacketToAuthorizedPK(List publicKeys, Packet packet) throws ProtocolException { + for(String publicKey : publicKeys){ + this.sendPacketToAuthorizedPK(publicKey, packet, null); + } + } + + /** * Отправить пакет всем клиентам с публичными ключом как у client, кроме клиента client, который является отправителем и не должен получать этот пакет * @param client клиент @@ -111,18 +155,6 @@ public class ClientManager { } } - /** - * Отправить пакет всем клиентам с публичными ключами из списка publicKeys - * @param publicKeys список публичных ключей получателей - * @param packet пакет для отправки - * @throws ProtocolException если произошла ошибка при отправке пакета клиенту - */ - public void sendPacketToAuthorizedPK(List publicKeys, Packet packet) throws ProtocolException { - for(String publicKey : publicKeys){ - this.sendPacketToAuthorizedPK(publicKey, packet); - } - } - /** * Получить список клиентов по публичному ключу (get PublicKey clients), могут быть неавторизованные клиенты * @param publicKey публичный ключ клиента diff --git a/src/main/java/im/rosetta/executors/Executor26SignalPeer.java b/src/main/java/im/rosetta/executors/Executor26SignalPeer.java index a287c51..6150690 100644 --- a/src/main/java/im/rosetta/executors/Executor26SignalPeer.java +++ b/src/main/java/im/rosetta/executors/Executor26SignalPeer.java @@ -141,6 +141,13 @@ public class Executor26SignalPeer extends PacketExecutor { room.addParticipant(participant); } session.sendPacket(packet, client); + /** + * Сбрасываем вызов на всех остальных устройствах пользователя, который принимает звонок, + * чтобы он не смог принять или отклонить звонок с другого устройства + */ + Packet26SignalPeer endCallOtherDevices = new Packet26SignalPeer(); + endCallOtherDevices.setSignalType(NetworkSignalType.END_CALL); + this.clientManager.sendPacketToAuthorizedPK(src, endCallOtherDevices, client); return; } if(type == NetworkSignalType.KEY_EXCHANGE){