/// <reference types="node" />
import { IClientPublishOptions, IClientSubscribeOptions, IPublishPacket } from 'mqtt';
import { MqttConnection } from './mqtt.types';
declare enum ClientState {
    uninitialized = 0,
    initialized = 1,
    connecting = 2,
    connected = 3,
    reconnecting = 4,
    disconnected = 5,
    offline = 6,
    ended = 7,
    closed = 8
}
export type ClientStateListener = (state: ClientState) => Promise<void>;
export type MessageHandler = {
    handleMessage: (topic: string, message: string | Buffer, packet: IPublishPacket) => Promise<void>;
};
export declare class MqttClient {
    private readonly logger;
    readonly state: import("@ngbites/reactive-enum").ReactiveEnum<typeof ClientState>;
    private messageHander;
    private delegate;
    quit(): Promise<void>;
    connect(connection: MqttConnection, messagehandler: MessageHandler): Promise<void>;
    publish(topic: string, message: Buffer | string, options?: IClientPublishOptions): Promise<void>;
    subscribe(topic: string, options?: IClientSubscribeOptions): Promise<import("mqtt").ISubscriptionGrant[] | undefined>;
    private connectionHandler;
    private reconnectHandler;
    private closeHandler;
    private disconnectHandler;
    private offlineHandler;
    private errorHandler;
    private endHandler;
    private onMessage;
}
export {};
//# sourceMappingURL=mqtt.client.d.ts.map