No puede seleccionar más de 25 temas
Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
|
- using System;
- using System.Collections.Generic;
- using System.Threading;
- using System.Threading.Tasks;
- using MQTTnet.Internal;
-
- namespace MQTTnet.Extensions.ManagedClient
- {
- public class ManagedMqttClientStorageManager
- {
- private readonly List<ManagedMqttApplicationMessage> _messages = new List<ManagedMqttApplicationMessage>();
- private readonly AsyncLock _messagesLock = new AsyncLock();
-
- private readonly IManagedMqttClientStorage _storage;
-
- public ManagedMqttClientStorageManager(IManagedMqttClientStorage storage)
- {
- _storage = storage ?? throw new ArgumentNullException(nameof(storage));
- }
-
- public async Task<List<ManagedMqttApplicationMessage>> LoadQueuedMessagesAsync()
- {
- var loadedMessages = await _storage.LoadQueuedMessagesAsync().ConfigureAwait(false);
- _messages.AddRange(loadedMessages);
-
- return _messages;
- }
-
- public async Task AddAsync(ManagedMqttApplicationMessage applicationMessage)
- {
- if (applicationMessage == null) throw new ArgumentNullException(nameof(applicationMessage));
-
- using (await _messagesLock.WaitAsync(CancellationToken.None).ConfigureAwait(false))
- {
- _messages.Add(applicationMessage);
- await SaveAsync().ConfigureAwait(false);
- }
- }
-
- public async Task RemoveAsync(ManagedMqttApplicationMessage applicationMessage)
- {
- if (applicationMessage == null) throw new ArgumentNullException(nameof(applicationMessage));
-
- using (await _messagesLock.WaitAsync(CancellationToken.None).ConfigureAwait(false))
- {
- var index = _messages.IndexOf(applicationMessage);
- if (index == -1)
- {
- return;
- }
-
- _messages.RemoveAt(index);
- await SaveAsync().ConfigureAwait(false);
- }
- }
-
- private Task SaveAsync()
- {
- return _storage.SaveQueuedMessagesAsync(_messages);
- }
- }
- }
|