Working mqtt setup

This commit is contained in:
uwap 2017-11-12 15:52:24 +01:00
parent bcb35877c1
commit a33474d893
9 changed files with 134 additions and 53 deletions

57
src/connectMqtt.js Normal file
View file

@ -0,0 +1,57 @@
// @flow
import mqtt from "mqtt";
// TODO: type mqtt.js
export type MqttSettings = {
onReconnect?: (mqtt: Object) => void,
onDisconnect?: (mqtt: Object) => void,
onMessage?: (topic: string, message: Object) => void,
onMessageSent?: (topic: string, message: any) => void,
onConnect?: (mqtt: Object) => void,
subscribe?: Array<string>
}
export type MessageCallback = (topic: string, message: any) => void;
export default function connectMqtt(
url: string,
settings: MqttSettings = {}
): MessageCallback {
const client = mqtt.connect(url);
client.on("connect", () => {
if (settings.subscribe != null) {
client.subscribe(settings.subscribe);
}
if (settings.onConnect != null) {
settings.onConnect(client);
}
});
client.on("message", (topic, message) => {
if (settings.onMessage != null) {
settings.onMessage(topic, message);
}
});
client.on("offline", () => {
if (settings.onDisconnect != null) {
settings.onDisconnect(client);
}
});
client.on("close", () => {
if (settings.onDisconnect != null) {
settings.onDisconnect(client);
}
});
client.on("reconnect", () => {
if (settings.onReconnect != null) {
settings.onReconnect(client);
}
});
return (topic: string, message: any) => {
client.publish(topic, message, null, (error) => {
if (error == null && settings.onMessageSent != null) {
settings.onMessageSent(topic, message);
}
});
};
}