feat(web): add WebSocket client and context infrastructure
- WsClient class: connect/disconnect/send/on/off/isConnected/clearCallbacks
- connect() derives wss:// from https:// automatically, returns Promise<void>
- on/off typed with Extract<WsServerMessage, { type: T }> for precise
callback narrowing, callbacks stored as Map<string, Set<fn>>
- ws-context.ts: WsContextValue type + WsContext definition
- ws-provider.tsx: WsProvider with module-level wsClient singleton,
owns connection lifecycle (connect/disconnect/isConnected state)
- ws-hooks.ts: useWsClient, useWsConnected, useWsConnect, useWsDisconnect
This commit is contained in:
parent
d60b0da9df
commit
9affe339c6
4 changed files with 99 additions and 0 deletions
|
|
@ -12,7 +12,16 @@ export class WsClient {
|
|||
private ws: WebSocket | null = null;
|
||||
private callbacks = new Map<string, Set<(msg: WsServerMessage) => void>>();
|
||||
|
||||
/**
|
||||
* Called when the WebSocket connection closes.
|
||||
* Set by WsProvider — do not set directly in components.
|
||||
*/
|
||||
public onError: ((event: Event) => void) | null = null;
|
||||
|
||||
/**
|
||||
* Called when the WebSocket connection encounters an error.
|
||||
* Set by WsProvider — do not set directly in components.
|
||||
*/
|
||||
public onClose: ((event: CloseEvent) => void) | null = null;
|
||||
|
||||
connect(apiUrl: string): Promise<void> {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue