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 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); } } } }