UNPKG

nmsg

Version:

Interprocess messenger for Node.js

293 lines (280 loc) 9.46 kB
declare module 'nmsg/backoff' { export class Backoff { retry(): void; } } declare module 'nmsg/message' { import { Readable, Writable, Duplex, Transform } from 'stream'; export interface MessageEncoder { encode(packet: Buffer): Buffer; } export interface MessageDecoder { add(data: Buffer): this; shift(): Buffer; } export class LPEncoder implements MessageEncoder { encode(buf: Buffer): Buffer; } export class LPDecoder implements MessageDecoder { buf: Buffer; add(buf: Buffer): this; shift(): Buffer; } export class LPEncoderStream extends Transform { encoder: LPEncoder; constructor(destination?: Writable | Duplex | Transform); _transform(chunk: Buffer | string, encoding: string, callback: (err?, data?) => void): void; } export class LPDecoderStream extends Transform { decoder: LPDecoder; constructor(source?: Readable | Duplex | Transform); _transform(chunk: Buffer | string, encoding: string, callback: (err?, data?) => void): void; } } declare module 'nmsg/util' { export function extend<T>(obj1: T, obj2: T, ...objs: T[]): T; } declare module 'nmsg/server/transport' { import { Readable, Writable, Duplex, Transform } from 'stream'; import { EventEmitter } from 'events'; export type TcallbackOnMessage = (chunk: Buffer | string) => void; export type TcallbackOnStart = () => void; export type TcallbackOnStop = () => void; export interface IConnection { onmessage: TcallbackOnMessage; onstart?: TcallbackOnStart; onstop?: TcallbackOnStop; send(chunk: Buffer | string): any; } export interface ITransport { opts: ITransportOpts; start(): any; stop(): any; } export abstract class Connection extends Duplex implements IConnection { onmessage: TcallbackOnMessage; send(chunk: Buffer | string): void; } export abstract class ConnectionStream extends Transform implements IConnection { 'in': Readable | Duplex | Transform; out: Writable | Duplex | Transform; onmessage: TcallbackOnMessage; send(chunk: Buffer | string): void; _transform(data: any, encoding: any, callback: any): void; } export interface ITransportOpts { } export abstract class Transport extends EventEmitter implements ITransport { static defaultOpts: {}; abstract start(): any; abstract stop(): any; opts: ITransportOpts; constructor(opts?: ITransportOpts); } } declare module 'nmsg/serialize' { export type TUnpacked = any | string | number | Array<any>; export type TBufferable = any | string | Buffer; export type TPacked = string | Buffer; export interface ISerializer { pack(data: TUnpacked): TPacked; unpack(data: TPacked): TUnpacked; } export abstract class Serializer implements ISerializer { static toBuffer(data: TBufferable): TPacked; static toString(data: TPacked): string; abstract pack(data: TUnpacked): TPacked; abstract unpack(data: TPacked): TUnpacked; } export class Json extends Serializer { pack(data: TUnpacked): TPacked; unpack(data: TPacked): TUnpacked; } export class Msgpack extends Serializer { pack(data: TUnpacked): TPacked; unpack(data: TPacked): TUnpacked; } } declare module 'nmsg/server/server' { import * as transport from 'nmsg/server/transport'; import { EventEmitter } from 'events'; import { Serializer } from 'nmsg/serialize'; export type TMessage = string | number | any; export type TcallbackOnMessage = (msg: TMessage) => void; export interface ISocket { onmessage: TcallbackOnMessage; send(msg: TMessage): any; } export class Socket implements ISocket { protected conn: transport.Connection; protected serializer: Serializer; onmessage: (msg: any) => void; constructor(connection: transport.Connection, serializer: Serializer); send(msg: TMessage): void; } export interface IServerOpts { transport?: transport.Transport; serializer?: Serializer; } export interface IServer { start(): this; stop(): any; } export class Server extends EventEmitter implements IServer { static defaultOpts: IServerOpts; protected transport: transport.Transport; protected opts: IServerOpts; constructor(opts?: IServerOpts); start(): this; stop(): void; } } declare module 'nmsg/rpc' { import { ISocket } from 'nmsg/server/server'; export type TeventCallback = (...args: any[]) => void; export type TeventCallbackList = TeventCallback[]; export interface IFrameData { i: number; a?: any[]; c?: number[]; t?: number; } export interface IFrameDataInitiation extends IFrameData { e: string; } export interface IFrameDataResponse extends IFrameData { r: number; f: number; } export abstract class Frame { static id: number; static getNextId(): number; static timeout: number; data: IFrameDataInitiation | IFrameDataResponse; id: number; event: string; args: any[]; callbacks: ((...args: any[]) => void)[]; rid: number; func: number; timeout: number; hasCallbacks(): boolean; isResponse(): boolean; } export class FrameOutgoing extends Frame { static createResponse(request: Frame, cb_pos: number, args: any[]): FrameOutgoing; constructor(args?: any[], event?: string); processResponse(response: FrameIncoming): void; serialize(): IFrameDataInitiation | IFrameDataResponse; } export class FrameIncoming extends Frame { reply(index: any, args: any): void; createTimedFunction(index: any): void; unserialize(data: any, onCallback: any): void; } export class Manager { latency: number; protected frame: { [id: number]: FrameOutgoing; }; send: (data) => void; protected subs: { [event: string]: TeventCallbackList; }; protected genCallack(frame: FrameIncoming, pos: number): (...args: any[]) => void; protected getSubList(event: string): TeventCallbackList; protected pub(frame: Frame): void; protected dispatch(frame: FrameOutgoing): void; protected processResponse(frame: FrameIncoming): void; constructor(socket?: ISocket); onmessage(msg: any): void; on(event: string, callback: TeventCallback): this; emit(event: string, ...args: any[]): void; } export class ManagerBuffered extends Manager { cycle: number; protected buffer: FrameOutgoing[]; protected flush(): void; } } declare module 'nmsg/client/transport' { import { IConnection, ITransport } from 'nmsg/server/transport'; export interface IClientTransport extends IConnection, ITransport { } } declare module 'nmsg/client/client' { import { EventEmitter } from 'events'; import { IClientTransport } from 'nmsg/client/transport'; import { ISocket, IServer } from 'nmsg/server/server'; import { Serializer } from 'nmsg/serialize'; export interface IClientOpts { transport?: IClientTransport; serializer?: Serializer; } export class Client extends EventEmitter implements ISocket, IServer { static defaultOpts: IClientOpts; onmessage: TcallbackOnMessage; onstart: TcallbackOnStart; onstop: TcallbackOnStop; protected opts: IClientOpts; constructor(opts?: IClientOpts); send(msg: any): void; start(): this; stop(): void; } } declare module 'nmsg/client/transport/tcp' { import { IClientTransport } from 'nmsg/client/transport'; import { Transform } from 'stream'; import * as net from 'net'; import * as message from 'nmsg/message'; export interface ITransportOpts { host?: string; port?: number; } export class Transport extends Transform implements IClientTransport { static defaultOpts: ITransportOpts; protected socket: net.Socket; protected 'in': message.LPDecoderStream; protected out: message.LPEncoderStream; onmessage: TcallbackOnMessage; onstart: TcallbackOnStart; onstop: TcallbackOnStop; opts: ITransportOpts; constructor(opts?: ITransportOpts); send(chunk: Buffer | string): void; start(): void; stop(): void; _transform(data: any, encoding: any, callback: any): void; } } declare module 'nmsg/server/transport/tcp' { import * as net from 'net'; import * as transport from 'nmsg/server/transport'; import * as message from 'nmsg/message'; export class Connection extends transport.ConnectionStream { in: message.LPDecoderStream; out: message.LPEncoderStream; constructor(socket: net.Socket); } export interface ITransportOpts extends transport.ITransportOpts { host?: string; port?: number; } export class Transport extends transport.Transport { static defaultOpts: ITransportOpts; protected server: net.Server; opts: ITransportOpts; constructor(opts?: ITransportOpts); start(): void; stop(): void; } } /// <reference path="../typings/node/node.d.ts" /> type TcallbackOnMessage = (chunk: Buffer|string) => void; type TcallbackOnStart = () => void; type TcallbackOnStop = () => void; declare module 'nmsg' { import main = require('nmsg'); export = main; }