/**
 * gp-mqtt-client | Simple MQTT Client
 *
 * @author Greg PFISTER
 * @since 0.1.0
 * @license MIT
 * @copyright (C) 2021, Greg PFISTER. MIT License
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
/// <reference types="node" />
import EventEmitter from 'events';
import { GPPublishOptions, GPSubscribeOptions, GPTopic } from '../models';
/**
 * MQTT Controller
 */
export declare class GPMqttController extends EventEmitter {
    private _logger;
    private _client?;
    private _hostname;
    private _port;
    private _protocol;
    private _deviceId;
    private _autoConnect;
    private _topic?;
    /**
     * Build a MQTT Controller that will connect to an MQTT server via TCP
     * @param hostname The hostname
     * @param port The port number
     * @param protocol The protocol (e.g. mqtt). Only mqtt supported for the time been
     * @param autoConnect Specifies if the client will autoconnect after been disconnected
     * @param verbose Output info message
     * @param debug Output debug message
     */
    constructor(hostname: string, port: number, protocol: string, autoConnect: boolean, verbose?: boolean, debug?: boolean);
    /**
     * Connect to the MQTT server
     */
    connect(): void;
    /**
     * Subscribe to a topic
     * @param topic The topic to subscribe to
     * @param options Options
     */
    subscribe(topic: GPTopic, options: GPSubscribeOptions): void;
    /**
     * Subscribe to a topic
     * @param topic The topic to publish to
     * @param message The message to publish
     * @param options Options
     */
    publish(topic: GPTopic, message: string, options: GPPublishOptions): void;
}
