Реализация сигналинга и обмена ключами

This commit is contained in:
RoyceDa
2026-03-02 18:53:15 +02:00
parent 7a89a3a307
commit e06d58facf
3 changed files with 10 additions and 27 deletions

View File

@@ -74,8 +74,12 @@ export function Call(props: CallProps) {
{callState == CallState.CONNECTING && (<Text fz={14} c={'#FFF'}>Connecting...</Text>)} {callState == CallState.CONNECTING && (<Text fz={14} c={'#FFF'}>Connecting...</Text>)}
{callState == CallState.INCOMING && (<Text fz={14} c={'#FFF'}>Incoming call...</Text>)} {callState == CallState.INCOMING && (<Text fz={14} c={'#FFF'}>Incoming call...</Text>)}
{callState == CallState.KEY_EXCHANGE && (<Text fz={14} c={'#FFF'}>Exchanging encryption keys...</Text>)} {callState == CallState.KEY_EXCHANGE && (<Text fz={14} c={'#FFF'}>Exchanging encryption keys...</Text>)}
{callState == CallState.WEB_RTC_EXCHANGE && (<Text fz={14} c={'#FFF'}>Exchanging encryption keys...</Text>)}
<Flex gap={'xl'} align={'center'} justify={'center'} mt={'xl'}> <Flex gap={'xl'} align={'center'} justify={'center'} mt={'xl'}>
{callState == CallState.ACTIVE || callState == CallState.CONNECTING || callState == CallState.KEY_EXCHANGE && ( {(callState == CallState.ACTIVE
|| callState == CallState.WEB_RTC_EXCHANGE
|| callState == CallState.CONNECTING
|| callState == CallState.KEY_EXCHANGE) && (
<> <>
<Box w={50} onClick={() => setSound(!sound)} style={{ <Box w={50} onClick={() => setSound(!sound)} style={{
borderRadius: 25, borderRadius: 25,

View File

@@ -26,6 +26,7 @@ export interface CallContextValue {
export enum CallState { export enum CallState {
CONNECTING, CONNECTING,
KEY_EXCHANGE, KEY_EXCHANGE,
WEB_RTC_EXCHANGE,
ACTIVE, ACTIVE,
ENDED, ENDED,
INCOMING INCOMING
@@ -128,28 +129,6 @@ export function CallProvider(props : CallProviderProps) {
info("Generated shared secret for call session: " + Buffer.from(computedSharedSecret).toString('hex')); info("Generated shared secret for call session: " + Buffer.from(computedSharedSecret).toString('hex'));
setSharedSecret(Buffer.from(computedSharedSecret).toString('hex')); setSharedSecret(Buffer.from(computedSharedSecret).toString('hex'));
} }
if(signalType == SignalType.OFFER){
const offerJson = packet.getOffer();
if(!offerJson || !peerConnectionRef.current){
info("Received offer but peer connection is not ready");
return;
}
handleOffer(offerJson);
}
if(signalType == SignalType.ANSWER){
const answerJson = packet.getAnswer();
if(!answerJson || !peerConnectionRef.current){
info("Received answer but peer connection is not ready");
return;
}
handleAnswer(answerJson);
}
if(signalType == SignalType.ACTIVE_CALL) {
setCallState(CallState.ACTIVE);
}
}, [activeCall, sessionKeys]); }, [activeCall, sessionKeys]);
const generateSessionKeys = () => { const generateSessionKeys = () => {

View File

@@ -5,12 +5,12 @@ export enum SignalType {
CALL = 0, CALL = 0,
KEY_EXCHANGE = 1, KEY_EXCHANGE = 1,
ACTIVE_CALL = 2, ACTIVE_CALL = 2,
END_CALL = 3, END_CALL = 3
OFFER = 4,
ANSWER = 5,
ICE_CONFIG = 6
} }
/**
* Пакет сигналинга, для сигналов WebRTC используется отдельный пакет 27 PacketWebRTCExchange
*/
export class PacketSignal extends Packet { export class PacketSignal extends Packet {
private src: string = ""; private src: string = "";