commit 6f17daa4b3939f049a1a69261311303cf689a362 Author: Philip Schell Date: Thu Feb 14 11:51:09 2019 +0100 move Mqtt to ConnectorDataMqtt diff --git a/ConnectorDataMqtt/ConnectorDataMqtt.csproj b/ConnectorDataMqtt/ConnectorDataMqtt.csproj new file mode 100644 index 0000000..975113d --- /dev/null +++ b/ConnectorDataMqtt/ConnectorDataMqtt.csproj @@ -0,0 +1,51 @@ + + + + + Debug + AnyCPU + {EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2} + Library + Properties + BlubbFish.Utils.IoT.Connector.Data + ConnectorDataMqtt + v4.7.1 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + {a11aef5a-b246-4fe8-8330-06db73cc8074} + M2Mqtt_4.7.1 + + + {b870e4d5-6806-4a0b-b233-8907eedc5afc} + Utils-IoT + + + + + + + \ No newline at end of file diff --git a/ConnectorDataMqtt/Mqtt.cs b/ConnectorDataMqtt/Mqtt.cs new file mode 100644 index 0000000..0ebd821 --- /dev/null +++ b/ConnectorDataMqtt/Mqtt.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Text; +using BlubbFish.Utils.IoT.Events; +using uPLibrary.Networking.M2Mqtt; +using uPLibrary.Networking.M2Mqtt.Messages; + +namespace BlubbFish.Utils.IoT.Connector.Data { + public class Mqtt : ADataBackend, IDisposable { + private MqttClient client; + + public Mqtt(Dictionary settings) : base(settings) { + Int32 port = 1883; + if(this.settings.ContainsKey("port")) { + port = Int32.Parse(this.settings["port"]); + } + this.client = new MqttClient(this.settings["server"], port, false, null, null, MqttSslProtocols.None); + Connect(); + } + + private void Connect() { + this.client.MqttMsgPublishReceived += this.Client_MqttMsgPublishReceived; + if (this.settings.ContainsKey("user") && this.settings.ContainsKey("pass")) { + this.client.Connect(Guid.NewGuid().ToString(), this.settings["user"], this.settings["pass"]); + } else { + this.client.Connect(Guid.NewGuid().ToString()); + } + if (this.settings.ContainsKey("topic")) { + Int32 l = this.settings["topic"].Split(';').Length; + Byte[] qos = new Byte[l]; + for (Int32 i = 0; i < qos.Length; i++) { + qos[i] = MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE; + } + this.client.Subscribe(this.settings["topic"].Split(';'), qos); + } else { + 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)); + } + + public override void Send(String topic, String data) { + this.client.Publish(topic, Encoding.UTF8.GetBytes(data)); + this.NotifyClientSending(new DataEvent(data, topic, DateTime.Now)); + } + + #region IDisposable Support + private Boolean disposedValue = false; + + public override Boolean IsConnected { + get { + if(this.client != null) { + return this.client.IsConnected; + } else { + return false; + } + } + } + + protected virtual void Dispose(Boolean disposing) { + if(!this.disposedValue) { + if(disposing) {try { + this.client.MqttMsgPublishReceived -= this.Client_MqttMsgPublishReceived; + this.client.Unsubscribe(new String[] { "#" }); + this.client.Disconnect(); + } catch (Exception) { } + } + + this.client = null; + + this.disposedValue = true; + } + } + + public override void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + #endregion + } +} diff --git a/ConnectorDataMqtt/Properties/AssemblyInfo.cs b/ConnectorDataMqtt/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d73f1be --- /dev/null +++ b/ConnectorDataMqtt/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("ConnectorDataMqtt")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ConnectorDataMqtt")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("ee6c8f68-ed46-4c1c-abdd-cfcdf75104f2")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, +// indem Sie "*" wie unten gezeigt eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")]