service-model
Version:
An object oriented web service framework inspired by Windows Communication Foundation.
98 lines (97 loc) • 2.76 kB
TypeScript
import { EventEmitter } from "events";
import { Callback } from "../common/callbackUtil";
import { DispatchService } from "./dispatchService";
import { Logger } from "../nullLogger";
import { RequestContext } from "../operationContext";
/**
* Responsible for dispatching service requests.
*
* <uml>
* hide members
* hide circle
* DispatcherFactory .> RequestDispatcher
* EventEmitter <|.. RequestDispatcher
* RequestDispatcher *-- DispatchService : services
* RequestDispatcher *- Logger : logger
* </uml>
*
* ### Events
* * `closing` - Triggered when [[close]] is called on the RequestDispatcher. This event indicates that the dispatcher is
* no longer accepting new requests.
* * `closed` - Triggered after the RequestedDispatched closes. This event indicates that all pending requests have
* completed or timed out.
* * `error` - Trigger if an unhandled exception is raised in an operation. This event is only relevant if an
* [[OperationContext]] is created.
*
*/
export declare class RequestDispatcher extends EventEmitter {
/**
* Timeout in milliseconds for close operation to complete. Any requests that have not completed before
* the timeout are aborted.
*/
closeTimeout: number;
/**
* List of services in the dispatcher.
*/
services: DispatchService[];
/**
* Logger to use that conforms to [bunyan](https://www.npmjs.com/package/bunyan)'s logger interface.
*/
logger: Logger;
/**
* @hidden
*/
private _head;
/**
* @hidden
*/
private _tail;
/**
* @hidden
*/
private _requestCount;
/**
* @hidden
*/
private _closing;
/**
* @hidden
*/
private _closed;
/**
* @hidden
*/
private _closeTimer;
/**
* Dispatches a request.
* @param request The request to dispatch.
*/
dispatch(request: RequestContext): void;
/**
* Validates that the dispatcher is correctly configured.
*/
validate(): void;
/**
* Closes the dispatcher. If any requests do not complete within 'closeTimeout', they are aborted.
* @param callback Optional. Called after dispatcher is closed.
*/
close(callback?: Callback): void;
/**
* Chooses the appropriate endpoint for the request.
* @param message The request message.
* @hidden
*/
private _chooseEndpoint(message);
/**
* Adds a request to the list of pending requests.
* @param handler The request handler.
* @hidden
*/
private _addRequest(handler);
/**
* Removes a request from the list of pending requests.
* @param handler The request handler.
* @hidden
*/
private _removeRequest(handler);
}