From fcf4204063ac2370eb38436a5ad69e512c0d5a44 Mon Sep 17 00:00:00 2001 From: RoyceDa Date: Tue, 17 Mar 2026 18:39:06 +0200 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20END=5FCALL=5FBECAUSE=5FBUSY=20=D0=B8=20END=5FCAL?= =?UTF-8?q?L=5FBECAUSE=5FPEER=5FDISCONNECTED?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/providers/CallProvider/CallProvider.tsx | 42 +++++++++++++++++++ .../protocol/packets/packet.signal.peer.ts | 10 ++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/app/providers/CallProvider/CallProvider.tsx b/app/providers/CallProvider/CallProvider.tsx index 9aeb389..72ba76c 100644 --- a/app/providers/CallProvider/CallProvider.tsx +++ b/app/providers/CallProvider/CallProvider.tsx @@ -8,6 +8,8 @@ import { usePacket } from "../ProtocolProvider/usePacket"; import { usePublicKey } from "../AccountProvider/usePublicKey"; import { PacketWebRTC, WebRTCSignalType } from "../ProtocolProvider/protocol/packets/packet.webrtc"; import { PacketIceServers } from "../ProtocolProvider/protocol/packets/packet.ice.servers"; +import { modals } from "@mantine/modals"; +import { Button, Flex, Text } from "@mantine/core"; export interface CallContextValue { @@ -165,6 +167,46 @@ export function CallProvider(props : CallProviderProps) { usePacket(26, async (packet: PacketSignalPeer) => { const signalType = packet.getSignalType(); + if(signalType == SignalType.END_CALL_BECAUSE_BUSY) { + modals.open({ + title: 'Busy', + centered: true, + children: ( + <> + + Line is busy, the user is currently on another call. Please try again later. + + + + + + ), + withCloseButton: false + }); + end(); + } + if(signalType == SignalType.END_CALL_BECAUSE_PEER_DISCONNECTED) { + modals.open({ + title: 'Connection lost', + centered: true, + children: ( + <> + + The connection with the user was lost. The call has ended. + + + + + + ), + withCloseButton: false + }); + end(); + } if(activeCall){ /** * У нас уже есть активный звонок, игнорируем все сигналы, кроме сигналов от текущего звонка diff --git a/app/providers/ProtocolProvider/protocol/packets/packet.signal.peer.ts b/app/providers/ProtocolProvider/protocol/packets/packet.signal.peer.ts index d37d513..1ad3d38 100644 --- a/app/providers/ProtocolProvider/protocol/packets/packet.signal.peer.ts +++ b/app/providers/ProtocolProvider/protocol/packets/packet.signal.peer.ts @@ -6,7 +6,9 @@ export enum SignalType { KEY_EXCHANGE = 1, ACTIVE_CALL = 2, END_CALL = 3, - CREATE_ROOM = 4 + CREATE_ROOM = 4, + END_CALL_BECAUSE_PEER_DISCONNECTED = 5, + END_CALL_BECAUSE_BUSY = 6 } /** @@ -40,6 +42,9 @@ export class PacketSignalPeer extends Packet { public _receive(stream: Stream): void { this.signalType = stream.readInt8(); + if(this.signalType == SignalType.END_CALL_BECAUSE_BUSY || this.signalType == SignalType.END_CALL_BECAUSE_PEER_DISCONNECTED){ + return; + } this.src = stream.readString(); this.dst = stream.readString(); if(this.signalType == SignalType.KEY_EXCHANGE){ @@ -54,6 +59,9 @@ export class PacketSignalPeer extends Packet { const stream = new Stream(); stream.writeInt16(this.getPacketId()); stream.writeInt8(this.signalType); + if(this.signalType == SignalType.END_CALL_BECAUSE_BUSY || this.signalType == SignalType.END_CALL_BECAUSE_PEER_DISCONNECTED){ + return stream; + } stream.writeString(this.src); stream.writeString(this.dst); if(this.signalType == SignalType.KEY_EXCHANGE){