UNPKG

protoobject

Version:

A universal class for creating any JSON objects and simple manipulations with them.

86 lines (85 loc) 2.59 kB
import { EventEmitter } from "node:events"; import { ProtoObject } from "./proto-object.js"; import type { ProtoObjectDynamicMethods } from "../types/dynamic-methods.js"; /** * Message types for TCP communication */ export declare enum MessageType { REQUEST = "REQUEST", RESPONSE = "RESPONSE", NOTIFICATION = "NOTIFICATION", ERROR = "ERROR" } /** * TCP Message wrapper */ export interface TCPMessage<T = any> { id: string; type: MessageType; timestamp: number; data: T; } /** * Static methods interface for TCP ProtoObject classes */ export interface ProtoObjectTCPStaticMethods<T extends ProtoObjectDynamicMethods<T>> { new (data?: Partial<T>): T; fromJSON<U extends ProtoObjectDynamicMethods<U>>(data: { [key: string]: unknown; }): U; } /** * TCP Server for ProtoObject communication */ export declare class ProtoObjectTCPServer extends EventEmitter { private port; private server; private clients; constructor(port?: number); private setupServer; private parseMessages; start(): Promise<void>; stop(): Promise<void>; sendToClient<T extends ProtoObject<T>>(clientId: string, object: T, type?: MessageType): boolean; broadcast<T extends ProtoObject<T>>(object: T, type?: MessageType): void; private sendMessage; private generateId; getConnectedClients(): string[]; } /** * TCP Client for ProtoObject communication */ export declare class ProtoObjectTCPClient extends EventEmitter { private host; private port; private socket; private messageBuffer; constructor(host?: string, port?: number); connect(): Promise<void>; private processMessages; send<T extends ProtoObject<T>>(object: T, type?: MessageType): boolean; disconnect(): void; private generateId; } /** * Base class for TCP-enabled ProtoObjects */ export declare class ProtoObjectTCP<T extends ProtoObjectDynamicMethods<T>> extends ProtoObject<T> { constructor(data?: Partial<T>); /** * Send this object through TCP client */ sendTCP(client: ProtoObjectTCPClient, type?: MessageType): boolean; /** * Broadcast this object through TCP server */ broadcastTCP(server: ProtoObjectTCPServer, type?: MessageType): void; /** * Send this object to specific client through TCP server */ sendToClientTCP(server: ProtoObjectTCPServer, clientId: string, type?: MessageType): boolean; /** * Create object from TCP message */ static fromTCPMessage<U extends ProtoObjectDynamicMethods<U>>(message: TCPMessage): U; }