@imqueue/rpc
Version:
RPC-like client-service implementation over messaging queue
123 lines (122 loc) • 4.19 kB
TypeScript
/*!
* IMQClient implementation
*
* Copyright (c) 2018, imqueue.com <support@imqueue.com>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
import { JsonObject } from '@imqueue/core';
import { IMQClientOptions, IMQRPCResponse, IMQRPCRequest, IMQDelay, Description } from '.';
import { EventEmitter } from 'events';
/**
* Class IMQClient - base abstract class for service clients.
*/
export declare abstract class IMQClient extends EventEmitter {
readonly options: IMQClientOptions;
readonly id: number;
readonly name: string;
readonly serviceName: string;
private readonly baseName;
private imq;
private readonly logger;
private resolvers;
/**
* Class constructor
*
* @constructor
* @param {Partial<IMQOptions>} options
* @param {string} serviceName
* @param {string} name
*/
constructor(options?: Partial<IMQClientOptions>, serviceName?: string, name?: string);
/**
* Sends call to remote service method
*
* @access protected
* @param {...any[]} args
* @returns {Promise<T>}
*/
protected remoteCall<T>(...args: any[]): Promise<T>;
/**
* Adds subscription to service event channel
*
* @param {(data: JsonObject) => any} handler
* @return {Promise<void>}
*/
subscribe(handler: (data: JsonObject) => any): Promise<void>;
/**
* Destroys subscription channel to service
*
* @return {Promise<void>}
*/
unsubscribe(): Promise<void>;
/**
* Broadcasts given payload to all other service clients subscribed.
* So this is like client-to-clients publishing.
*
* @param {JsonObject} payload
* @return {Promise<void>}
*/
broadcast(payload: JsonObject): Promise<void>;
/**
* Initializes client work
*
* @returns {Promise<void>}
*/
start(): Promise<void>;
/**
* Stops client work
*
* @returns {Promise<void>}
*/
stop(): Promise<void>;
/**
* Destroys client
*
* @returns {Promise<void>}
*/
destroy(): Promise<void>;
/**
* Returns service description metadata.
*
* @param {IMQDelay} delay
* @returns {Promise<Description>}
*/
describe(delay?: IMQDelay): Promise<Description>;
/**
* Creates client for a service with the given name
*
* @param {string} name
* @param {Partial<IMQServiceOptions>} options
* @returns {IMQClient}
*/
static create(name: string, options?: Partial<IMQClientOptions>): Promise<any>;
}
/**
* Builds and returns call resolver, which supports after call optional hook
*
* @param {(...args: any[]) => void} resolve - source promise like resolver
* @param {IMQRPCRequest} req - request message
* @param {IMQClient} client - imq client
* @return {(data: any, res: IMQRPCResponse) => void} - hook-supported resolve
*/
export declare function imqCallResolver(resolve: (data: any) => void, req: IMQRPCRequest, client: IMQClient): (data: any, res: IMQRPCResponse) => void;
/**
* Builds and returns call rejector, which supports after call optional hook
*
* @param {(err: any) => void} reject - source promise like rejector
* @param {IMQRPCRequest} req - call request
* @param {IMQClient} client - imq client
* @return {(err: any) => void} - hook-supported reject
*/
export declare function imqCallRejector(reject: (err: any) => void, req: IMQRPCRequest, client: IMQClient): (err: any, res?: IMQRPCResponse) => void;