import { MqttOptions } from '../model/mqtt.interface'; /** * http://www.eclipse.org/paho/files/jsdoc/Paho.MQTT.Client.html */ declare const Paho: any; export class MqttClient { client: any; connected = false; constructor() { } connect({ host, port, clientId, username, password, useSSL, onConnectionLost, onMessageArrived, onMessageDelivered, _logMessage }: MqttOptions): Promise { this.disconnect(); const client = this.client = new Paho.MQTT.Client( host, port, clientId ); const log = (obj: any, prefix: string) => { if (_logMessage) { console.log('mqtt', prefix, obj); } } client.onConnectionLost = (event: any) => { log(event, 'onConnectionLost'); onConnectionLost && onConnectionLost(event); }; client.onMessageArrived = (message: any) => { log(message, 'onMessageArrived'); onMessageArrived && onMessageArrived(message); }; client.onMessageDelivered = (event: any) => { log(event, 'onMessageDelivered'); onMessageDelivered && onMessageDelivered(event); }; return new Promise((resolve, reject) => { client.connect({ userName: username, password: password, mqttVersion: 3, useSSL: useSSL, reconnect: true, onSuccess: (response: any) => { console.log('mqtt connected', response); this.connected = true; resolve(true); }, onFailure: reject }); }); } publish(topic: string) { } disconnect() { try { this.connected = false; this.client && this.client.disconnect(); } finally { } } }