Skip to content

Commit 6f1feaa

Browse files
Merge pull request #77 from virizar/set_correct_qos_mqtt_agent_create_message
MTConnectMqttEntityServer: set correct qos for CreateMessage variants
2 parents eb4952c + 0f15626 commit 6f1feaa

5 files changed

Lines changed: 24 additions & 4 deletions

File tree

agent/Modules/MTConnect.NET-AgentModule-MqttBroker/Module.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public Module(IMTConnectAgentBroker mtconnectAgent, object configuration) : base
5656

5757
case MqttTopicStructure.Entity:
5858

59-
_entityServer = new MTConnectMqttEntityServer(_configuration.TopicPrefix, _configuration.DocumentFormat);
59+
_entityServer = new MTConnectMqttEntityServer(_configuration.TopicPrefix, _configuration.DocumentFormat, _configuration.QoS);
6060
Agent.DeviceAdded += AgentDeviceAdded;
6161
Agent.ObservationAdded += AgentObservationAdded;
6262
Agent.AssetAdded += AgentAssetAdded;

agent/Modules/MTConnect.NET-AgentModule-MqttRelay/Module.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public Module(IMTConnectAgentBroker mtconnectAgent, object configuration) : base
5757

5858
case MqttTopicStructure.Entity:
5959

60-
_entityServer = new MTConnectMqttEntityServer(_configuration.TopicPrefix, _configuration.DocumentFormat);
60+
_entityServer = new MTConnectMqttEntityServer(_configuration.TopicPrefix, _configuration.DocumentFormat, _configuration.QoS);
6161
Agent.DeviceAdded += AgentDeviceAdded;
6262
Agent.ObservationAdded += AgentObservationAdded;
6363
Agent.AssetAdded += AgentAssetAdded;

libraries/MTConnect.NET-MQTT/Configurations/IMTConnectMqttEntityServerConfiguration.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,10 @@ public interface IMTConnectMqttEntityServerConfiguration
1414
///
1515
/// </summary>
1616
string DocumentFormat { get; }
17+
18+
/// <summary>
19+
///
20+
/// </summary>
21+
int QoS { get; set; }
1722
}
1823
}

libraries/MTConnect.NET-MQTT/Configurations/MTConnectMqttEntityServerConfiguration.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2023 TrakHound Inc., All Rights Reserved.
1+
// Copyright (c) 2024 TrakHound Inc., All Rights Reserved.
22
// TrakHound Inc. licenses this file to you under the MIT license.
33

44
namespace MTConnect.Configurations
@@ -9,11 +9,14 @@ public class MTConnectMqttEntityServerConfiguration : IMTConnectMqttEntityServer
99

1010
public string DocumentFormat { get; set; }
1111

12+
public int QoS { get; set; }
13+
1214

1315
public MTConnectMqttEntityServerConfiguration()
1416
{
1517
TopicPrefix = "MTConnect";
1618
DocumentFormat = "JSON";
19+
QoS = 0;
1720
}
1821
}
1922
}

libraries/MTConnect.NET-MQTT/MTConnectMqttEntityServer.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@ public class MTConnectMqttEntityServer
2323
public string TopicPrefix => _configuration.TopicPrefix;
2424

2525

26-
public MTConnectMqttEntityServer(string topicPrefix = null, string documentFormat = DocumentFormat.JSON)
26+
public MTConnectMqttEntityServer(string topicPrefix = null, string documentFormat = DocumentFormat.JSON, int qos = 0)
2727
{
2828
var configuration = new MTConnectMqttEntityServerConfiguration();
2929
configuration.TopicPrefix = topicPrefix;
3030
configuration.DocumentFormat = documentFormat;
31+
configuration.QoS = qos;
3132
_configuration = configuration;
3233
}
3334

@@ -81,6 +82,7 @@ private MqttApplicationMessage CreateMessage(IDevice device)
8182
messageBuilder.WithTopic(topic);
8283
messageBuilder.WithPayload(formatResult.Content);
8384
messageBuilder.WithRetainFlag(true);
85+
messageBuilder.WithQualityOfServiceLevel(GetQualityOfService(_configuration.QoS));
8486
return messageBuilder.Build();
8587
}
8688
}
@@ -167,6 +169,7 @@ private MqttApplicationMessage CreateMessage(IObservation observation)
167169
messageBuilder.WithTopic(topic);
168170
messageBuilder.WithPayload(formatResult.Content);
169171
messageBuilder.WithRetainFlag(true);
172+
messageBuilder.WithQualityOfServiceLevel(GetQualityOfService(_configuration.QoS));
170173
return messageBuilder.Build();
171174
}
172175
}
@@ -198,6 +201,7 @@ private MqttApplicationMessage CreateMessage(IEnumerable<IObservation> observati
198201
messageBuilder.WithTopic(topic);
199202
messageBuilder.WithPayload(formatResult.Content);
200203
messageBuilder.WithRetainFlag(true);
204+
messageBuilder.WithQualityOfServiceLevel(GetQualityOfService(_configuration.QoS));
201205
return messageBuilder.Build();
202206
}
203207
}
@@ -250,11 +254,19 @@ private MqttApplicationMessage CreateMessage(IAsset asset)
250254
messageBuilder.WithTopic(topic);
251255
messageBuilder.WithPayload(formatResult.Content);
252256
messageBuilder.WithRetainFlag(true);
257+
messageBuilder.WithQualityOfServiceLevel(GetQualityOfService(_configuration.QoS));
253258
return messageBuilder.Build();
254259
}
255260
}
256261

257262
return null;
258263
}
264+
265+
private static MQTTnet.Protocol.MqttQualityOfServiceLevel GetQualityOfService(int qos)
266+
{
267+
if (qos == 1) return MQTTnet.Protocol.MqttQualityOfServiceLevel.AtLeastOnce;
268+
else if (qos == 2) return MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce;
269+
else return MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce;
270+
}
259271
}
260272
}

0 commit comments

Comments
 (0)