import { ILogObj, Logger } from 'tslog';
import { IMessage, IMessageHandler, OcppError, OcppRequest, OcppResponse } from '../..';
import { SystemConfig } from '../../config/types';
import { CallAction } from '../../ocpp/rpc/message';
import { IModule } from '../modules';
import { HandlerProperties } from '.';
/**
 * Abstract class implementing {@link IMessageHandler}.
 */
export declare abstract class AbstractMessageHandler implements IMessageHandler {
    /**
     * Fields
     */
    protected _config: SystemConfig;
    protected _module?: IModule;
    protected _logger: Logger<ILogObj>;
    /**
     * Constructor
     *
     * @param config The system configuration.
     * @param logger [Optional] The logger to use.
     */
    constructor(config: SystemConfig, logger?: Logger<ILogObj>, module?: IModule);
    /**
     * Getter & Setter
     */
    get module(): IModule | undefined;
    set module(value: IModule | undefined);
    /**
     * Methods
     */
    handle(message: IMessage<OcppRequest | OcppResponse | OcppError>, props?: HandlerProperties): Promise<void>;
    /**
     * Abstract Methods
     */
    abstract subscribe(identifier: string, actions?: CallAction[], filter?: {
        [k: string]: string;
    }): Promise<boolean>;
    abstract unsubscribe(identifier: string): Promise<boolean>;
    abstract shutdown(): Promise<void>;
}
