public void Clear(Retain options = Retain.None) { if (options == Retain.None) { Orders.Clear(); } else { var ordersToRemove = Orders.Where(item => { if (item.Value.Active) { if ((options & Retain.ActiveGTC) != 0 && item.Value.TimeInForce == TimeInForce.GoodTillCancel) { return(false); } if ((options & Retain.ActiveGTD) != 0 && item.Value.TimeInForce == TimeInForce.GoodTillDate) { return(false); } } return(true); }).ToArray(); foreach (var item in ordersToRemove) { Orders.Remove(item.Key); } } Messages.Clear(); }
/// <summary> /// 写入固定报头首字节 /// </summary> /// <returns></returns> private void WriteFixedHeaderByte(IByteBuffer buf) { var ret = (byte)PacketType << 4; ret |= Dup.ToByte() << 3; ret |= (byte)Qos << 1; ret |= Retain.ToByte(); buf.WriteByte(ret); }
private void SaveRetain(String topic, RetainMessage retainMessage, bool isClean) { Retain.TryGetValue(topic, out ConcurrentQueue <RetainMessage> retainMessages); if (!retainMessages.IsEmpty && isClean) { retainMessages.Clear(); } retainMessages.Enqueue(retainMessage); Retain.AddOrUpdate(topic, retainMessages, (key, value) => retainMessages); }
public void WriteTo(Stream stream) { var flags = (byte)MessageType << 4; flags |= Dup.ToByte() << 3; flags |= (byte)Qos << 1; flags |= Retain.ToByte(); stream.WriteByte((byte)flags); stream.Write(EncodeLength(RemaingLength)); }
public void WriteTo(IByteBuffer buffer) { var flags = (byte)PacketType << 4; flags |= Dup.ToByte() << 3; flags |= (byte)Qos << 1; flags |= Retain.ToByte(); buffer.WriteByte((byte)flags); buffer.WriteBytes(EncodeLength(RemaingLength)); }
public async Task SendRetain(string topic, MqttChannel mqttChannel) { Retain.TryGetValue(topic, out ConcurrentQueue <RetainMessage> retainMessages); if (retainMessages != null && !retainMessages.IsEmpty) { var messages = retainMessages.GetEnumerator(); while (messages.MoveNext()) { var retainMessage = messages.Current; await SendMessage(mqttChannel, retainMessage.QoS, topic, retainMessage.ByteBuf); } ; } }
public async Task SendRetain(string topic, MqttChannel mqttChannel) { Retain.TryGetValue(topic, out ConcurrentQueue <RetainMessage> retainMessages); if (retainMessages != null && !retainMessages.IsEmpty) { var count = retainMessages.Count; for (int i = 0; i < count; i++) { if (retainMessages.TryDequeue(out RetainMessage retainMessage)) { await SendMessage(mqttChannel, retainMessage.QoS, topic, retainMessage.ByteBuf); } } } }
/// <summary> /// Adds the options to the list. /// </summary> public void AddToOptionList(OptionList options, bool clearList = true) { if (clearList) { options.Clear(); } options["RootTopic"] = RootTopic; options["UndefinedValue"] = UndefinedValue; options["PublishFormat"] = PublishFormat; options["QosLevel"] = QosLevel.ToString(); options["Retain"] = Retain.ToString(); options["MaxQueueSize"] = MaxQueueSize.ToString(); options["DataLifetime"] = DataLifetime.ToString(); options["DetailedLog"] = DetailedLog.ToString(); options["DeviceFilter"] = DeviceFilter.ToRangeString(); }
public override int GetHashCode() { var hashCode = QualityOfService.GetHashCode() + Duplicated.GetHashCode() + Retain.GetHashCode() + Topic.GetHashCode(); if (Payload != null) { hashCode += BitConverter.ToString(Payload).GetHashCode(); } if (PacketId.HasValue) { hashCode += PacketId.Value.GetHashCode(); } return(hashCode); }