1 module drmi.mqtt.transport;
2 
3 import std.exception : enforce;
4 
5 public import drmi.ps.iface;
6 
7 public import mosquitto;
8 
9 ///
10 class MqttTransport : Transport
11 {
12 private:
13     MosquittoClient cli;
14     MosquittoClient ecli() @property { return enforce(cli, "cli is null"); }
15 
16     MosquittoClient.Settings sets;
17 public:
18 
19     ///
20     this(MosquittoClient.Settings sets)
21     {
22         this.sets = sets;
23         initMosquittoLib();
24     }
25 
26     ///
27     void init(string name)
28     {
29         sets.clientId = name;
30         cli = new MosquittoClient(sets);
31     }
32 
33     ///
34     void connect() { ecli.connect(); }
35     ///
36     bool connected() { return ecli.connected(); }
37     ///
38     void reconnect() { ecli.reconnect(); }
39 
40     ///
41     void loop() { ecli.loop(); }
42 
43     ///
44     void publish(string topic, const(ubyte)[] data, QoS qos)
45     { ecli.publish(topic, data, qos); }
46 
47     ///
48     void subscribe(string topic, void delegate(string, const(ubyte)[]) dlg, QoS qos)
49     { ecli.subscribe(topic, dlg, qos); }
50 }