protoobject
Version:
A universal class for creating any JSON objects and simple manipulations with them.
86 lines (85 loc) • 2.59 kB
TypeScript
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;
}