import { create } from 'zustand'; import { WebRTCClient } from '~/lib/websocket/voice/client'; import { ConnectionState } from '~/lib/websocket/voice/types'; import { useVoiceStateStore } from './voice-state-store'; const VOICE_GATEWAY_URL = 'ws://localhost:12345/voice/ws'; interface WebRTCState { client: WebRTCClient | null; status: ConnectionState; remoteStream: MediaStream | null; error: string | null; connect: (token: string) => Promise; disconnect: () => void; createOffer: (localStream: MediaStream) => Promise; } export const useWebRTCStore = create()((set, get) => { const client = new WebRTCClient( VOICE_GATEWAY_URL, (state) => set({ status: state }), (error) => { set({ status: ConnectionState.ERROR, error: error.message }); useVoiceStateStore.getState().setError(error.message); }, (stream) => set({ remoteStream: stream }) ); return { client, status: ConnectionState.DISCONNECTED, remoteStream: null, error: null, connect: async (token) => { await client.connect(token); }, disconnect: () => { client.disconnect(); set({ status: ConnectionState.DISCONNECTED, remoteStream: null }); }, createOffer: async (localStream) => { await client.createOffer(localStream); } }; });