/// import { ICommand, IDataEmitter, IDataEvent, IDataEventListener, IDataEventListenerFunc, IDisposable, IEmitterDescription, IExecutionResult, IFormatSettings, ISettings, IStatusChangeListener, IStatusChangeListenerFunc, IStatusEvent, ITraceableAction } from './dataEmitter'; import { LoggerFacade, LogLevel } from './loggerFacade'; import EventEmitter from 'events'; /** * */ export declare class BaseStatusEvent implements IStatusEvent { emitter: IDataEmitter; connected: boolean; bit: boolean; timestamp: Date; /** * * @param {boolean} connected * @param {boolean} bit * @param {IDataEmitter} emitter * @param {Date} timestamp */ constructor(connected: boolean, bit: boolean, emitter: IDataEmitter, timestamp?: Date); /** * @return {Record} */ toJSON(): Record; } /** * Create a base data event */ export declare class BaseDataEvent implements IDataEvent { readonly emitter: IDataEmitter; readonly timestamp: Date; readonly data: unknown; readonly meta: unknown; /** * Create a data event object * @param {IDataEmitter} emitter * @param {unknown} data * @param {unknown} meta */ constructor(emitter: IDataEmitter, data: unknown, meta: unknown); /** * Converts the object into a JSON friendly object * @return {Record} */ toJSON(): Record; } /** * Abstract base class emitter that takes care of managing registrations of * listeners and cleanup on disposal */ export declare abstract class BaseEmitter extends EventEmitter implements IDataEmitter, IDisposable { private _id; private _name; private _description; protected _logger: LoggerFacade | undefined; /** * Listener collection for data change listeners */ private readonly _dataListeners; /** * Listener collection for status change listeners */ private readonly _statusListeners; /** * connected state */ private _connected; /** * faulted state */ private _faulted; /** * DC check interval handle * @private */ private _dcInterval?; /** * amount of time between dc checks * @private */ private _dcIntervalms?; /** * amount of time since successful message emission till we consider * the state to be disconnected * @private */ private _dcThresholdMs; /** * The last time the source has successfully produced data * @private */ private _dcLastHeardTime?; /** * @return {string} unique id for emitter */ get id(): string; /** * @return {string} emitter name */ get name(): string; /** * @return {string} communication link description */ get description(): string; /** * * @param {string} _id * @param {string} _name * @param {string} _description * @param {LoggerFacade|undefined} _logger */ constructor(_id: string, _name: string, _description: string, _logger?: LoggerFacade | undefined); /** * serialize the important data that is needed to be able to recreate this emitter in it's current state * @param {IFormatSettings} settings used to specify expected format of the serialization * @return {Promise} */ serializeState(settings: IFormatSettings): Promise; /** * Control serialized properties when JSON.stringify is called * @return {Record} */ toJSON(): Record; /** * * @param {IDataEvent} evt */ protected notifyDataListeners(evt: IDataEvent): void; /** * * @param {IDataEventListener} listener * @return {IDisposable} */ onData(listener: IDataEventListener | IDataEventListenerFunc): IDisposable; /** * * @param {IStatusEvent} evt */ protected notifyStatusListeners(evt: IStatusEvent): void; /** * * @param {string} name */ protected setName(name: string): void; /** * * @param {string} description */ protected setDescription(description: string): void; /** * Set the unique identifier for the emitter * @param {string} id */ protected setId(id: string): void; /** * Takes a simple function listener parameter and turns it into the listener interface * format * @param {IStatusChangeListenerFunc} listener * @return {IStatusChangeListener} */ protected wrapStatusListener(listener: IStatusChangeListenerFunc): IStatusChangeListener; /** * Wrap a data listener function into a {IDataEventListener} * @param {IDataEventListenerFunc} listener * @return {IDataEventListener} */ protected wrapDataListener(listener: IDataEventListenerFunc): IDataEventListener; /** * * @param {IStatusChangeListener} listener * @return {IDisposable} */ onStatus(listener: IStatusChangeListener | IStatusChangeListenerFunc): IDisposable; /** * Clear any faults and notify listeners of change if change */ protected clearIfFaulted(): void; /** * faulted */ protected faulted(): void; /** * connected */ protected connected(): void; /** * disconnected */ protected disconnected(): void; /** * build a status event * @return {IStatusEvent} */ protected buildStatusEvent(): IStatusEvent; /** * build a data event * @param {unknown} data * @return {IDataEvent} */ protected buildDataEvent(data: unknown): IDataEvent; /** * Sets how frequently the dc check is executed * @param {number} checkInterval * @param {number} threshold * @protected */ protected setDCCheckInterval(checkInterval: number, threshold: number): void; /** * Execute logic to detect disconnections and notify listeners * @private */ private dcHandler; /** * Apply settings to the emitter, this could be emitter settings * such as poll intervel, d/c threshold, or use the additional * property to apply settings to the underlying source * @param {ISettings} settings * @return {Promise} */ applySettings(settings: ISettings & ITraceableAction): Promise; /** * Prefix a log message with information about the emitter * @param {string} msg * @return {string} */ protected prefixLogMessage(msg: string): string; /** * Log information * @param {LogLevel} level * @param {String} msg * @return {void} */ protected log(level: LogLevel, msg: string): void; /** * Send a command to the emitter, this could change emitter behavior, * write something directly the unlderying source etc. * @param {ITraceableAction} command * @return {Promise} */ abstract sendCommand(command: ICommand): Promise; /** * Fetch the latest state information such as connectivity * from the emitter, this could be cached from last event emission or generated * each time * @return {Promise} */ abstract probeStatus(): Promise; /** * Probe the current data, this could return the * last emitted data for event based streams, * or actually trigger fetching the latest from the * source * @return {Promise} */ abstract probeCurrentData(): Promise; /** * Get meta data associated with this emitter, this varies * per emitter implementation * @return {unknown} */ abstract getMetaData(): unknown; /** * Get the emitter type for this emitter */ abstract getType(): string; /** * Gets the emitter description which is used to recreate the emitter * @return {IEmitterDescription} */ protected getEmitterDescription(): IEmitterDescription; /** * * @return {unknown} */ protected getEmitterProperties(): unknown; /** * * @param {string} stateData * @param {IFormatSettings} settings */ static recreateEmitter(stateData: string, settings: IFormatSettings): Promise; /** * Cleanup any resources/timers managed by the * emitter */ dispose(): void; }