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
@@ -140,3 +140,7 @@ export function restoreKeys() {
currentPublicKey = ub64(localStorage.getItem("publicKey")!); currentPublicKey = ub64(localStorage.getItem("publicKey")!);
currentPrivateKey = ub64(localStorage.getItem("privateKey")!); 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) { handleWebSocketMessage(message: CallSignalingMessage) {
const { data } = message; const { data } = message;
if (!data) { if (!data) {
console.warn("Received call signaling message with no data:", message);
return; return;
} }
File diff suppressed because it is too large Load Diff
+12 -16
View File
@@ -36,10 +36,6 @@ export default function useCall() {
const remoteScreenShareRef = globalRemoteScreenShareRef; const remoteScreenShareRef = globalRemoteScreenShareRef;
useEffect(() => { useEffect(() => {
if (user.authToken) {
WebRTC.setAuthToken(user.authToken);
}
// Initialize call signaling handler // Initialize call signaling handler
const signalingHandler = new CallSignalingHandler(() => ({ const signalingHandler = new CallSignalingHandler(() => ({
receiveCall: (userId: number, username: string) => { receiveCall: (userId: number, username: string) => {
@@ -55,7 +51,7 @@ export default function useCall() {
setCallSignalingHandler(signalingHandler); setCallSignalingHandler(signalingHandler);
// Set up call state change handler // Set up call state change handler
WebRTC.setCallStateChangeHandler((userId: number, state: string) => { WebRTC.callbacks.onCallStateChange = (userId: number, state: string) => {
const call = chat.call; const call = chat.call;
if (call.remoteUserId === userId) { if (call.remoteUserId === userId) {
switch (state) { switch (state) {
@@ -72,10 +68,10 @@ export default function useCall() {
break; break;
} }
} }
}); };
// Set up remote audio stream handler // Set up remote audio stream handler
WebRTC.setRemoteStreamHandler((_userId: number, stream: MediaStream) => { WebRTC.callbacks.onRemoteStream = (_userId: number, stream: MediaStream) => {
if (!remoteAudioRef.current) { if (!remoteAudioRef.current) {
return; return;
} }
@@ -97,10 +93,10 @@ export default function useCall() {
} catch (e) { } catch (e) {
console.warn("failed to attach remote stream:", e); console.warn("failed to attach remote stream:", e);
} }
}); };
// Set up local video stream handler // Set up local video stream handler
WebRTC.setLocalVideoStreamHandler((_userId: number, stream: MediaStream | null) => { WebRTC.callbacks.onLocalVideoStream = (_userId: number, stream: MediaStream | null) => {
if (!localVideoRef.current) { if (!localVideoRef.current) {
return; return;
} }
@@ -118,10 +114,10 @@ export default function useCall() {
} catch (e) { } catch (e) {
console.warn("failed to attach local video stream:", e); console.warn("failed to attach local video stream:", e);
} }
}); };
// Set up remote video stream handler // Set up remote video stream handler
WebRTC.setRemoteVideoStreamHandler((_userId: number, stream: MediaStream | null) => { WebRTC.callbacks.onRemoteVideoStream = (_userId: number, stream: MediaStream | null) => {
if (!remoteVideoRef.current) { if (!remoteVideoRef.current) {
return; return;
} }
@@ -139,10 +135,10 @@ export default function useCall() {
} catch (e) { } catch (e) {
console.warn("failed to attach remote video stream:", e); console.warn("failed to attach remote video stream:", e);
} }
}); };
// Set up local screen share handler // Set up local screen share handler
WebRTC.setLocalScreenShareHandler((_userId: number, stream: MediaStream | null) => { WebRTC.callbacks.onLocalScreenShare = (_userId: number, stream: MediaStream | null) => {
if (!localScreenShareRef.current) { if (!localScreenShareRef.current) {
return; return;
} }
@@ -160,10 +156,10 @@ export default function useCall() {
} catch (e) { } catch (e) {
console.warn("failed to attach local screen share stream:", e); console.warn("failed to attach local screen share stream:", e);
} }
}); };
// Set up remote screen share handler // Set up remote screen share handler
WebRTC.setRemoteScreenShareHandler((_userId: number, stream: MediaStream | null) => { WebRTC.callbacks.onRemoteScreenShare = (_userId: number, stream: MediaStream | null) => {
if (!remoteScreenShareRef.current) { if (!remoteScreenShareRef.current) {
return; return;
} }
@@ -181,7 +177,7 @@ export default function useCall() {
} catch (e) { } catch (e) {
console.warn("failed to attach remote screen share stream:", e); console.warn("failed to attach remote screen share stream:", e);
} }
}); };
return () => { return () => {
WebRTC.cleanup(); WebRTC.cleanup();