MQTT broker client library written completely in D.
MQTT protocol version supported: 3.1.1
Depends on: vibe.d
Tested on:
Supported MQTT 3.1.1 features:
- QoS0, QoS1 and QoS2 messages handling
- Authentication
- Session state storage (currently in memory only - #20)
- Sending retain messages
- Async API (publish blocks if send queue is full)
- Data agnostic
- Message ordering
- KeepAlive mechanism support (PingReq/PingResp) (#11)
- Auto reconnect to broker (#15)
- TLS/SSL (#16)
- On subscribe topics validation (#17)
- Last Will and Testament (LWT) (#21)
- Delivery retry (#14)
Pull Requests are welcome, don't be shy ;)
Example code can be found in the examples
directory.
Simple publisher which connects to the MQTT broker and periodically sends a message. Implicitly it connects to 127.0.0.1:1883
auto settings = Settings();
settings.clientId = "test publisher";
auto mqtt = new MqttClient(settings);
mqtt.connect();
auto publisher = runTask(() {
while (mqtt.connected) {
mqtt.publish("chat", "I'm still here!!!");
sleep(2.seconds());
}
});
Simple subscriber which connects to the MQTT broker, subscribes to the topic and outputs each received message. Implicitly it connects to 127.0.0.1:1883
auto settings = Settings();
settings.clientId = "test subscriber";
settings.onConnAck = (scope MqttClient ctx, in ConnAck packet)
{
ctx.subscribe(["chat"]);
};
settings.onPublish = (scope MqttClient ctx, in Publish packet)
{
writeln("chat: ", cast(string)packet.payload);
};
auto mqtt = new MqttClient(settings);
mqtt.connect();