Реализация сигналинга и обмена ключами
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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 = () => {
|
||||||
|
|||||||
@@ -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 = "";
|
||||||
|
|||||||
Reference in New Issue
Block a user