2025-12-26 01:15:43 -05:00
|
|
|
import { createContext, useContext, ReactNode } from 'react'
|
|
|
|
|
import { useWebSocket, WebSocketMessage } from '../hooks/useWebSocket'
|
|
|
|
|
|
|
|
|
|
interface WebSocketContextType {
|
|
|
|
|
isConnected: boolean
|
|
|
|
|
lastMessage: WebSocketMessage | null
|
|
|
|
|
messageHistory: WebSocketMessage[]
|
|
|
|
|
sendMessage: (message: any) => void
|
|
|
|
|
subscribe: (messageType: string, handler: (message: WebSocketMessage) => void) => () => void
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const WebSocketContext = createContext<WebSocketContextType | undefined>(undefined)
|
|
|
|
|
|
|
|
|
|
export function WebSocketProvider({ children }: { children: ReactNode }) {
|
2026-01-02 19:03:10 -05:00
|
|
|
const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
|
|
|
const wsUrl = import.meta.env.VITE_WS_URL || `${wsProtocol}//${window.location.host}/ws/`;
|
2025-12-26 01:15:43 -05:00
|
|
|
const { isConnected, lastMessage, messageHistory, sendMessage, subscribe } = useWebSocket(wsUrl)
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<WebSocketContext.Provider value={{ isConnected, lastMessage, messageHistory, sendMessage, subscribe }}>
|
|
|
|
|
{children}
|
|
|
|
|
</WebSocketContext.Provider>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function useWebSocketContext() {
|
|
|
|
|
const context = useContext(WebSocketContext)
|
|
|
|
|
if (!context) {
|
|
|
|
|
throw new Error('useWebSocketContext must be used within WebSocketProvider')
|
|
|
|
|
}
|
|
|
|
|
return context
|
|
|
|
|
}
|