| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- using System;
- using System.Collections.Generic;
- using MQTTnet.Packets;
- using MQTTnet.Protocol;
- namespace MQTTnet.Formatter.V5
- {
- public class MqttV500PropertiesWriter
- {
- // TODO: Consider lazy init on first write to avoid useless allocations.
- private readonly MqttPacketWriter _packetWriter = new MqttPacketWriter();
- public int Length => _packetWriter.Length;
- public void WriteUserProperties(List<MqttUserProperty> userProperties)
- {
- if (userProperties == null || userProperties.Count == 0)
- {
- return;
- }
- foreach (var property in userProperties)
- {
- _packetWriter.Write((byte)MqttPropertyId.UserProperty);
- _packetWriter.WriteWithLengthPrefix(property.Name);
- _packetWriter.WriteWithLengthPrefix(property.Value);
- }
- }
- public void WriteCorrelationData(byte[] value)
- {
- Write(MqttPropertyId.CorrelationData, value);
- }
- public void WriteAuthenticationData(byte[] value)
- {
- Write(MqttPropertyId.AuthenticationData, value);
- }
- public void WriteReasonString(string value)
- {
- Write(MqttPropertyId.ReasonString, value);
- }
- public void WriteResponseTopic(string value)
- {
- Write(MqttPropertyId.ResponseTopic, value);
- }
- public void WriteContentType(string value)
- {
- Write(MqttPropertyId.ContentType, value);
- }
- public void WriteServerReference(string value)
- {
- Write(MqttPropertyId.ServerReference, value);
- }
- public void WriteAuthenticationMethod(string value)
- {
- Write(MqttPropertyId.AuthenticationMethod, value);
- }
- public void WriteTo(IMqttPacketWriter packetWriter)
- {
- if (packetWriter == null) throw new ArgumentNullException(nameof(packetWriter));
- packetWriter.WriteVariableLengthInteger((uint)_packetWriter.Length);
- packetWriter.Write(_packetWriter);
- }
- public void WriteSessionExpiryInterval(uint? value)
- {
- WriteAsFourByteInteger(MqttPropertyId.SessionExpiryInterval, value);
- }
- public void WriteSubscriptionIdentifier(uint? value)
- {
- WriteAsVariableLengthInteger(MqttPropertyId.SubscriptionIdentifier, value);
- }
- public void WriteSubscriptionIdentifiers(IEnumerable<uint> value)
- {
- if (value == null)
- {
- return;
- }
- foreach (var subscriptionIdentifier in value)
- {
- WriteAsVariableLengthInteger(MqttPropertyId.SubscriptionIdentifier, subscriptionIdentifier);
- }
- }
- public void WriteTopicAlias(ushort? value)
- {
- Write(MqttPropertyId.TopicAlias, value);
- }
- public void WriteMessageExpiryInterval(uint? value)
- {
- WriteAsFourByteInteger(MqttPropertyId.MessageExpiryInterval, value);
- }
- public void WritePayloadFormatIndicator(MqttPayloadFormatIndicator? value)
- {
- if (!value.HasValue)
- {
- return;
- }
- Write(MqttPropertyId.PayloadFormatIndicator, (byte)value.Value);
- }
- public void WriteWillDelayInterval(uint? value)
- {
- WriteAsFourByteInteger(MqttPropertyId.WillDelayInterval, value);
- }
- public void WriteRequestProblemInformation(bool? value)
- {
- Write(MqttPropertyId.RequestProblemInformation, value);
- }
- public void WriteRequestResponseInformation(bool? value)
- {
- Write(MqttPropertyId.RequestResponseInformation, value);
- }
- public void WriteReceiveMaximum(ushort? value)
- {
- Write(MqttPropertyId.ReceiveMaximum, value);
- }
- public void WriteMaximumPacketSize(uint? value)
- {
- WriteAsFourByteInteger(MqttPropertyId.MaximumPacketSize, value);
- }
- public void WriteRetainAvailable(bool? value)
- {
- Write(MqttPropertyId.RetainAvailable, value);
- }
- public void WriteAssignedClientIdentifier(string value)
- {
- Write(MqttPropertyId.AssignedClientIdentifier, value);
- }
- public void WriteTopicAliasMaximum(ushort? value)
- {
- Write(MqttPropertyId.TopicAliasMaximum, value);
- }
- public void WriteWildcardSubscriptionAvailable(bool? value)
- {
- Write(MqttPropertyId.WildcardSubscriptionAvailable, value);
- }
- public void WriteSubscriptionIdentifiersAvailable(bool? value)
- {
- Write(MqttPropertyId.SubscriptionIdentifiersAvailable, value);
- }
- public void WriteSharedSubscriptionAvailable(bool? value)
- {
- Write(MqttPropertyId.SharedSubscriptionAvailable, value);
- }
- public void WriteServerKeepAlive(ushort? value)
- {
- Write(MqttPropertyId.ServerKeepAlive, value);
- }
- public void WriteResponseInformation(string value)
- {
- Write(MqttPropertyId.ResponseInformation, value);
- }
- private void Write(MqttPropertyId id, bool? value)
- {
- if (!value.HasValue)
- {
- return;
- }
- _packetWriter.Write((byte)id);
- _packetWriter.Write(value.Value ? (byte)0x1 : (byte)0x0);
- }
- private void Write(MqttPropertyId id, byte? value)
- {
- if (!value.HasValue)
- {
- return;
- }
- _packetWriter.Write((byte)id);
- _packetWriter.Write(value.Value);
- }
- private void Write(MqttPropertyId id, ushort? value)
- {
- if (!value.HasValue)
- {
- return;
- }
- _packetWriter.Write((byte)id);
- _packetWriter.Write(value.Value);
- }
- private void WriteAsVariableLengthInteger(MqttPropertyId id, uint? value)
- {
- if (!value.HasValue)
- {
- return;
- }
- _packetWriter.Write((byte)id);
- _packetWriter.WriteVariableLengthInteger(value.Value);
- }
- private void WriteAsFourByteInteger(MqttPropertyId id, uint? value)
- {
- if (!value.HasValue)
- {
- return;
- }
- _packetWriter.Write((byte)id);
- _packetWriter.Write((byte)(value.Value >> 24));
- _packetWriter.Write((byte)(value.Value >> 16));
- _packetWriter.Write((byte)(value.Value >> 8));
- _packetWriter.Write((byte)value.Value);
- }
- private void Write(MqttPropertyId id, string value)
- {
- if (value == null)
- {
- return;
- }
- _packetWriter.Write((byte)id);
- _packetWriter.WriteWithLengthPrefix(value);
- }
- private void Write(MqttPropertyId id, byte[] value)
- {
- if (value == null)
- {
- return;
- }
- _packetWriter.Write((byte)id);
- _packetWriter.WriteWithLengthPrefix(value);
- }
- }
- }
|