UNPKG

narraleaf

Version:

Create your visual novel with Electron and React

47 lines (46 loc) 1.93 kB
import { WebSocket, WebSocketServer } from "ws"; import { EventEmitter } from "events"; import { AppEventToken } from "../../main/electron/app/app"; export type WSEventProp = { type: WSEventType; data: Record<string, any>; response?: Record<string, any>; }; export type WSData<T extends Record<string, any>> = T & { replyId?: string; }; export declare enum WSEventType { Message = "message", Request = "request" } export interface WebsocketServerConfig { port: number; host?: string; } export declare class Server<T extends Record<any, WSEventProp>> { private config; events: EventEmitter; wss: WebSocketServer | null; constructor(config: WebsocketServerConfig); start(): this; onConnection(callback: (ws: WebSocket) => void): AppEventToken; onMessage<U extends keyof T>(type: U, callback: (data: WSData<T[U]>["data"]) => WSData<T[U]>["response"] extends Record<any, any> ? WSData<T[U]>["response"] : void, ws: WebSocket): AppEventToken; onDisconnect(callback: (ws: WebSocket) => void): AppEventToken; send<U extends keyof T>(type: U, data: T[U]["data"], ws: WebSocket): void; announce<U extends keyof T>(type: U, data: T[U]["data"]): void; close(): void; } export declare class Client<T extends Record<any, WSEventProp>> { private url; ws: WebSocket | null; private _id; constructor(url: string); static construct<T extends Record<any, WSEventProp>>(host: string, port: number): Client<T>; connect(): this; onMessage<U extends keyof T>(type: U, callback: (data: T[U]["data"]) => void): AppEventToken; onReply<U extends keyof T>(type: U, replyId: string, callback: (data: T[U]["response"]) => void): AppEventToken; send<U extends keyof T>(type: U, data: T[U]["data"]): void; close(): void; fetch<U extends keyof T>(type: U, data: T[U]["data"]): Promise<T[U]["response"]>; forSocketToOpen(): Promise<void>; }