|
@@ -1,26 +1,27 @@
|
|
|
-using System.Diagnostics.CodeAnalysis;
|
|
|
+using System;
|
|
|
+using System.Diagnostics.CodeAnalysis;
|
|
|
using System.Text;
|
|
|
using HAServer.Interfaces.Core;
|
|
|
using uPLibrary.Networking.M2Mqtt;
|
|
|
using uPLibrary.Networking.M2Mqtt.Messages;
|
|
|
|
|
|
-namespace HAServer.Core {
|
|
|
+namespace HAServer.MQTT {
|
|
|
[ExcludeFromCodeCoverage]
|
|
|
- public class MqttManager : ISubscriber {
|
|
|
+ public class MqttManager : IComponent, ISubscriber {
|
|
|
private readonly MqttClient _client;
|
|
|
private readonly IMessageBus _messageBus;
|
|
|
private readonly bool _retain;
|
|
|
private readonly byte _qosLevel;
|
|
|
|
|
|
- public MqttManager(IMessageBus messageBus, IMqttSettingsProvider settings) {
|
|
|
+ public MqttManager(IMessageBus messageBus, ISettingsProvider settings) {
|
|
|
_messageBus = messageBus;
|
|
|
- _qosLevel = settings.MqttQos;
|
|
|
- _retain = settings.MqttRetain;
|
|
|
- _messageBus.AddSubscriber(this, $"{settings.MqttBaseTopic}/.*");
|
|
|
+ _qosLevel = settings.MqttQos();
|
|
|
+ _retain = settings.MqttRetain();
|
|
|
+ _messageBus.AddSubscriber(this, $"{settings.MqttBaseTopic()}/.*");
|
|
|
|
|
|
- _client = new MqttClient(settings.MqttHost);
|
|
|
+ _client = new MqttClient(settings.MqttHost());
|
|
|
_client.MqttMsgPublishReceived += MessageRecieved;
|
|
|
- _client.Subscribe(new[] { $"{settings.MqttBaseTopic}/#" }, new[] { _qosLevel });
|
|
|
+ _client.Subscribe(new[] { $"{settings.MqttBaseTopic()}/#" }, new[] { _qosLevel });
|
|
|
}
|
|
|
|
|
|
void MessageRecieved(object sender, MqttMsgPublishEventArgs e) {
|
|
@@ -28,16 +29,16 @@ namespace HAServer.Core {
|
|
|
_messageBus.PublishMessage(e.Topic, message, this);
|
|
|
}
|
|
|
|
|
|
- public void Connect(string clientName) {
|
|
|
- _client.Connect(clientName);
|
|
|
+ public void ProcessMessage(string topic, string message) {
|
|
|
+ _client.Publish(topic, Encoding.UTF8.GetBytes(message), _qosLevel, _retain);
|
|
|
}
|
|
|
|
|
|
- public void Disconnect() {
|
|
|
- _client.Disconnect();
|
|
|
+ public void Initialise() {
|
|
|
+ _client.Connect(Environment.MachineName);
|
|
|
}
|
|
|
|
|
|
- public void ProcessMessage(string topic, string message) {
|
|
|
- _client.Publish(topic, Encoding.UTF8.GetBytes(message), _qosLevel, _retain);
|
|
|
+ public void Shutdown() {
|
|
|
+ _client.Disconnect();
|
|
|
}
|
|
|
}
|
|
|
}
|