Utils/IoT/Connector/Data/Mqtt/Mqtt.cs

63 lines
2.0 KiB
C#
Raw Normal View History

2017-10-02 18:26:38 +02:00
using System;
using System.Collections.Generic;
using System.Text;
using BlubbFish.Utils.IoT.Events;
2017-10-02 18:26:38 +02:00
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;
2017-10-03 00:51:08 +02:00
namespace BlubbFish.Utils.IoT.Connector.Data {
2017-12-03 12:23:19 +01:00
public class Mqtt : ADataBackend, IDisposable {
2017-10-02 18:26:38 +02:00
private MqttClient client;
public Mqtt(Dictionary<String, String> settings) : base(settings) {
2017-10-02 18:26:38 +02:00
if(settings.ContainsKey("port")) {
this.client = new MqttClient(settings["server"], Int32.Parse(settings["port"]), false, null, null, MqttSslProtocols.None);
} else {
this.client = new MqttClient(settings["server"]);
}
Connect();
}
private void Connect() {
this.client.MqttMsgPublishReceived += this.Client_MqttMsgPublishReceived;
this.client.Connect(Guid.NewGuid().ToString());
this.client.Subscribe(new String[] { "#" }, new Byte[] { MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE });
}
private void Client_MqttMsgPublishReceived(Object sender, MqttMsgPublishEventArgs e) {
this.NotifyClientIncomming(new DataEvent(Encoding.UTF8.GetString(e.Message), e.Topic, DateTime.Now));
2017-10-02 18:26:38 +02:00
}
public override void Send(String topic, String data) {
this.client.Publish(topic, Encoding.UTF8.GetBytes(data));
this.NotifyClientSending(new DataEvent(data, topic, DateTime.Now));
2017-10-02 18:26:38 +02:00
}
#region IDisposable Support
private Boolean disposedValue = false;
protected virtual void Dispose(Boolean disposing) {
if(!this.disposedValue) {
2017-12-17 21:00:13 +01:00
if(disposing) {try {
this.client.MqttMsgPublishReceived -= this.Client_MqttMsgPublishReceived;
this.client.Unsubscribe(new String[] { "#" });
this.client.Disconnect();
} catch (Exception) { }
2017-10-02 18:26:38 +02:00
}
this.client = null;
this.disposedValue = true;
}
}
2018-06-02 19:14:42 +02:00
2017-10-02 18:26:38 +02:00
public override void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
#endregion
}
}