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