///
import { EventEmitter } from 'events';
import { System } from '../../libs/system/System';
import { ILoggerApi } from '../../libs/logging/ILoggerApi';
import { ClassType } from '@allgemein/schema-api';
import { IMessageOptions } from './IMessageOptions';
import { AbstractEvent } from './AbstractEvent';
export declare abstract class AbstractMessage extends EventEmitter {
protected system: System;
protected request: REQ;
protected responses: RES[];
protected targetIds: string[];
/**
* Detect targets
*
* @protected
*/
protected detectTargets: boolean;
protected results: any | any[];
protected active: boolean;
protected timeout: number;
protected logger: ILoggerApi;
protected start: Date;
protected stop: Date;
protected readonly reqClass: ClassType;
protected readonly resClass: ClassType;
protected options: IMessageOptions;
constructor(system: System, reqClass: ClassType, resClass: ClassType, options?: IMessageOptions);
target(nodeId: string): this;
abstract doPostProcess(responses: RES[], err?: Error): any;
getSystem(): System;
getLocalNodeId(): string;
getReqClass(): ClassType;
getResClass(): ClassType;
beforeSend?(req: REQ): void;
send(req: REQ): Promise;
postProcess(err?: Error): Promise;
/**
* Overrideable method to additionaly check if response is valid.
*
* If false the response will be ignored in onResults.
*
* @param res
*/
requestCheck(res: RES): boolean;
onResults(res: RES): void;
ready(): Promise;
}