/// <reference types="node" />
import { EventEmitter } from 'events';
import { IConfig, IEventListener, IRequiredConfig } from '../../types';
import { PowerManager, RedisClient } from 'redis-smq-common';
import { ICallback, ICompatibleLogger, TFunction, TUnaryFunction } from 'redis-smq-common/dist/types';
export declare abstract class Base extends EventEmitter {
    protected readonly id: string;
    protected readonly powerManager: PowerManager;
    protected sharedRedisClient: RedisClient | null;
    protected logger: ICompatibleLogger;
    protected config: IRequiredConfig;
    protected eventListeners: IEventListener[];
    constructor(config?: IConfig);
    protected setUpSharedRedisClient: (cb: ICallback<void>) => void;
    protected tearDownSharedRedisClient: (cb: ICallback<void>) => void;
    protected registerSystemEventListeners(): void;
    protected goingUp(): TFunction[];
    protected up(cb?: ICallback<boolean>): void;
    protected goingDown(): TUnaryFunction<ICallback<void>>[];
    protected down(cb?: ICallback<boolean>): void;
    protected getSharedRedisClient(): RedisClient;
    protected registerEventListeners(Ctors: (new () => IEventListener)[], cb: ICallback<void>): void;
    protected tearDownEventListeners: (cb: ICallback<void>) => void;
    handleError(err: Error): void;
    run(cb?: ICallback<boolean>): void;
    shutdown(cb?: ICallback<boolean>): void;
    isRunning(): boolean;
    isGoingUp(): boolean;
    isGoingDown(): boolean;
    isUp(): boolean;
    isDown(): boolean;
    getId(): string;
    getConfig(): IRequiredConfig;
}
