|
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using MQTTnet.Core.Exceptions;
- using MQTTnet.Core.Protocol;
-
- namespace MQTTnet.Core
- {
- public class MqttApplicationMessageBuilder
- {
- private MqttQualityOfServiceLevel _qualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce;
- private string _topic;
- private byte[] _payload;
- private bool _retain;
-
- public MqttApplicationMessageBuilder WithTopic(string topic)
- {
- _topic = topic;
- return this;
- }
-
- public MqttApplicationMessageBuilder WithPayload(IEnumerable<byte> payload)
- {
- if (payload == null)
- {
- _payload = null;
- return this;
- }
-
- _payload = payload.ToArray();
- return this;
- }
-
- public MqttApplicationMessageBuilder WithPayload(MemoryStream payload)
- {
- if (payload == null)
- {
- _payload = null;
- return this;
- }
-
- if (payload.Length == 0)
- {
- _payload = new byte[0];
- }
- else
- {
- _payload = new byte[payload.Length - payload.Position];
- payload.Read(_payload, 0, _payload.Length);
- }
-
- return this;
- }
-
- public MqttApplicationMessageBuilder WithPayload(string payload)
- {
- if (payload == null)
- {
- _payload = null;
- return this;
- }
-
- _payload = string.IsNullOrEmpty(payload) ? new byte[0] : Encoding.UTF8.GetBytes(payload);
- return this;
- }
-
- public MqttApplicationMessageBuilder WithQualityOfServiceLevel(MqttQualityOfServiceLevel qualityOfServiceLevel)
- {
- _qualityOfServiceLevel = qualityOfServiceLevel;
- return this;
- }
-
- public MqttApplicationMessageBuilder WithRetainFlag(bool value = true)
- {
- _retain = value;
- return this;
- }
-
- public MqttApplicationMessageBuilder WithAtLeastOnceQoS()
- {
- _qualityOfServiceLevel = MqttQualityOfServiceLevel.AtLeastOnce;
- return this;
- }
-
- public MqttApplicationMessageBuilder WithAtMostOnceQoS()
- {
- _qualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce;
- return this;
- }
-
- public MqttApplicationMessageBuilder WithExactlyOnceQoS()
- {
- _qualityOfServiceLevel = MqttQualityOfServiceLevel.ExactlyOnce;
- return this;
- }
-
- public MqttApplicationMessage Build()
- {
- if (string.IsNullOrEmpty(_topic))
- {
- throw new MqttProtocolViolationException("Topic is not set.");
- }
-
- return new MqttApplicationMessage
- {
- Topic = _topic,
- Payload = _payload ?? new byte[0],
- QualityOfServiceLevel = _qualityOfServiceLevel,
- Retain = _retain
- };
- }
- }
- }
|