///
///
import { ClientOptions, SocketServer, Logger, MethodDef, CommonOptions, OnSend, OnRecv, RateLimitDef } from './interfaces';
import { SocketServerClient, ErrorHandler } from './server';
import { IncomingMessage } from 'http';
import { Send, PacketHandler, RemoteState } from './packet/packetHandler';
export interface Token {
id: string;
data?: any;
expire: number;
}
export interface ClientState extends RemoteState {
lastMessageTime: number;
lastMessageId: number;
lastSendTime: number;
token: Token | undefined;
ping(): void;
client: SocketServerClient;
}
export interface ServerInfo {
writerBufferSize: number;
freeTokens: number;
clientsByToken: number;
}
export interface Server {
clients: ClientState[];
close(): void;
options(): ClientOptions;
token(data?: any): string;
clearToken(id: string): void;
clearTokens(test: (id: string, data?: any) => boolean): void;
info(): ServerInfo;
}
export declare type CreateServer = (client: TClient & SocketServerClient) => (TServer | Promise);
export declare type CreateServerMethod = (client: any) => (SocketServer | Promise);
export interface ServerHost {
close(): void;
socket(serverType: new (...args: any[]) => TServer, clientType: new (...args: any[]) => TClient, createServer: CreateServer, options?: ServerOptions): Server;
socketRaw(createServer: CreateServerMethod, options: ServerOptions): Server;
upgrade(request: any, socket: any): void;
}
export interface GlobalConfig {
path?: string;
errorHandler?: ErrorHandler;
perMessageDeflate?: boolean;
log?: Logger;
ws?: any;
errorCode?: number;
errorName?: string;
nativePing?: number;
/** function for tracking timing of methods */
timingStart?: (name: string) => void;
timingEnd?: () => void;
}
export interface InternalServer {
clients: ClientState[];
freeTokens: Map;
clientsByToken: Map;
currentClientId: number;
pingInterval: any;
tokenInterval: any;
totalSent: number;
totalReceived: number;
batchClient: ClientState | undefined;
id: string;
path: string;
hash: string;
debug: boolean;
forceBinary: boolean;
connectionTokens: boolean;
keepOriginalRequest: boolean;
errorIfNotConnected: boolean;
tokenLifetime: number;
clientLimit: number;
transferLimit: number;
serverMethods: MethodDef[];
clientMethods: string[];
rateLimits: (RateLimitDef | undefined)[];
resultBinary: boolean[];
timingStart: (name: string) => void;
timingEnd: () => void;
verifyClient: (req: IncomingMessage) => boolean;
createClient: (client: SocketServerClient, send: (data: string | Uint8Array | Buffer) => void) => SocketServerClient;
createServer: CreateServerMethod;
handleResult: (send: Send, obj: ClientState, funcId: number, funcBinary: boolean, result: Promise, messageId: number) => void;
packetHandler: PacketHandler;
server: Server;
}
export interface ServerOptions extends CommonOptions {
/** ping interval in milliseconds, ping disabled if not specified or 0 */
pingInterval?: number;
/** time after after last message from client when server assumes client is not responding (in milliseconds) */
connectionTimeout?: number;
/** limit connections to one per generated token */
connectionTokens?: boolean;
/** lifetime of connection token */
tokenLifetime?: number;
/** maximum number of connected clients */
clientLimit?: number;
/** per message deflate compression switch */
perMessageDeflate?: boolean;
/** transfer limit (bytes per second) */
transferLimit?: number;
/** custom client verification method */
verifyClient?: (req: IncomingMessage) => boolean;
/** allows to modify client object */
createClient?: (client: SocketServerClient, send: (data: string | Uint8Array | Buffer) => void) => SocketServerClient;
/** ws library or alternative */
ws?: any;
/** use ArrayBuffer instead of Buffer on server side */
arrayBuffer?: boolean;
/** only allow binary packets and binary connections */
forceBinary?: boolean;
/** only allow binary encoding for packets with binary option */
forceBinaryPackets?: boolean;
/** use binary encoding for packets without encoding specified */
useBinaryByDefault?: boolean;
/** keep original request info in client.originalRequest field */
keepOriginalRequest?: boolean;
/** throws error if server tries to send message to disconnected client */
errorIfNotConnected?: boolean;
/** prints to console generated packet handler code */
printGeneratedCode?: boolean;
/** send/recv handlers */
onSend?: OnSend;
onRecv?: OnRecv;
client?: MethodDef[];
server?: MethodDef[];
}