Make WebRTC call a class

This commit is contained in:
2025-10-14 17:04:38 +03:00
Unverified
parent bcf445916c
commit eba9875466
4 changed files with 799 additions and 769 deletions
+4
View File
@@ -139,4 +139,8 @@ export async function ensureKeysOnLogin(password: string, token: string): Promis
export function restoreKeys() {
currentPublicKey = ub64(localStorage.getItem("publicKey")!);
currentPrivateKey = ub64(localStorage.getItem("privateKey")!);
}
export function getAuthToken(): string | null {
return localStorage.getItem("authToken");
}
-1
View File
@@ -25,7 +25,6 @@ export class CallSignalingHandler {
handleWebSocketMessage(message: CallSignalingMessage) {
const { data } = message;
if (!data) {
console.warn("Received call signaling message with no data:", message);
return;
}
File diff suppressed because it is too large Load Diff
+14 -18
View File
@@ -18,11 +18,11 @@ export default function useCall() {
chat,
startCall,
endCall,
setCallStatus,
setCallStatus,
toggleMute,
toggleVideo,
toggleScreenShare,
setCallEncryption,
setCallEncryption,
setCallSessionKeyHash,
setRemoteVideoEnabled,
setRemoteScreenSharing,
@@ -36,10 +36,6 @@ export default function useCall() {
const remoteScreenShareRef = globalRemoteScreenShareRef;
useEffect(() => {
if (user.authToken) {
WebRTC.setAuthToken(user.authToken);
}
// Initialize call signaling handler
const signalingHandler = new CallSignalingHandler(() => ({
receiveCall: (userId: number, username: string) => {
@@ -55,7 +51,7 @@ export default function useCall() {
setCallSignalingHandler(signalingHandler);
// Set up call state change handler
WebRTC.setCallStateChangeHandler((userId: number, state: string) => {
WebRTC.callbacks.onCallStateChange = (userId: number, state: string) => {
const call = chat.call;
if (call.remoteUserId === userId) {
switch (state) {
@@ -72,10 +68,10 @@ export default function useCall() {
break;
}
}
});
};
// Set up remote audio stream handler
WebRTC.setRemoteStreamHandler((_userId: number, stream: MediaStream) => {
WebRTC.callbacks.onRemoteStream = (_userId: number, stream: MediaStream) => {
if (!remoteAudioRef.current) {
return;
}
@@ -97,10 +93,10 @@ export default function useCall() {
} catch (e) {
console.warn("failed to attach remote stream:", e);
}
});
};
// Set up local video stream handler
WebRTC.setLocalVideoStreamHandler((_userId: number, stream: MediaStream | null) => {
WebRTC.callbacks.onLocalVideoStream = (_userId: number, stream: MediaStream | null) => {
if (!localVideoRef.current) {
return;
}
@@ -118,10 +114,10 @@ export default function useCall() {
} catch (e) {
console.warn("failed to attach local video stream:", e);
}
});
};
// Set up remote video stream handler
WebRTC.setRemoteVideoStreamHandler((_userId: number, stream: MediaStream | null) => {
WebRTC.callbacks.onRemoteVideoStream = (_userId: number, stream: MediaStream | null) => {
if (!remoteVideoRef.current) {
return;
}
@@ -139,10 +135,10 @@ export default function useCall() {
} catch (e) {
console.warn("failed to attach remote video stream:", e);
}
});
};
// Set up local screen share handler
WebRTC.setLocalScreenShareHandler((_userId: number, stream: MediaStream | null) => {
WebRTC.callbacks.onLocalScreenShare = (_userId: number, stream: MediaStream | null) => {
if (!localScreenShareRef.current) {
return;
}
@@ -160,10 +156,10 @@ export default function useCall() {
} catch (e) {
console.warn("failed to attach local screen share stream:", e);
}
});
};
// Set up remote screen share handler
WebRTC.setRemoteScreenShareHandler((_userId: number, stream: MediaStream | null) => {
WebRTC.callbacks.onRemoteScreenShare = (_userId: number, stream: MediaStream | null) => {
if (!remoteScreenShareRef.current) {
return;
}
@@ -181,7 +177,7 @@ export default function useCall() {
} catch (e) {
console.warn("failed to attach remote screen share stream:", e);
}
});
};
return () => {
WebRTC.cleanup();