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){