narraleaf
Version:
Create your visual novel with Electron and React
47 lines (46 loc) • 1.93 kB
TypeScript
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>;
}