using System; using System.Globalization; using System.IO; using System.Text; using MQTTnet.Core.Protocol; namespace MQTTnet.Core { public class MqttApplicationMessageFactory { public MqttApplicationMessage CreateApplicationMessage(string topic, MqttQualityOfServiceLevel qualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce, bool retain = false) { if (topic == null) throw new ArgumentNullException(nameof(topic)); return CreateApplicationMessage(topic, new byte[0], qualityOfServiceLevel, retain); } public MqttApplicationMessage CreateApplicationMessage(string topic, byte[] payload, MqttQualityOfServiceLevel qualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce, bool retain = false) { if (topic == null) throw new ArgumentNullException(nameof(topic)); if (payload == null) { payload = new byte[0]; } return new MqttApplicationMessage(topic, payload, qualityOfServiceLevel, retain); } public MqttApplicationMessage CreateApplicationMessage(string topic, TPayload payload, MqttQualityOfServiceLevel qualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce, bool retain = false) { if (topic == null) throw new ArgumentNullException(nameof(topic)); var payloadString = Convert.ToString(payload, CultureInfo.InvariantCulture); var payloadBuffer = string.IsNullOrEmpty(payloadString) ? new byte[0] : Encoding.UTF8.GetBytes(payloadString); return CreateApplicationMessage(topic, payloadBuffer, qualityOfServiceLevel, retain); } public MqttApplicationMessage CreateApplicationMessage(string topic, Stream payload, MqttQualityOfServiceLevel qualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce, bool retain = false) { if (topic == null) throw new ArgumentNullException(nameof(topic)); byte[] payloadBuffer; if (payload == null || payload.Length == 0) { payloadBuffer = new byte[0]; } else { payloadBuffer = new byte[payload.Length - payload.Position]; payload.Read(payloadBuffer, 0, payloadBuffer.Length); } return CreateApplicationMessage(topic, payloadBuffer, qualityOfServiceLevel, retain); } } }