Optimized persisting of retained messages to avoid useless writes to the filesystem

This commit is contained in:
Christian Kratky
2017-11-08 14:30:13 +01:00
parent 7e48746944
commit d2e481719c
8 changed files with 155 additions and 28 deletions
@@ -0,0 +1,50 @@
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using MQTTnet.Core;
using MQTTnet.Core.Server;
using Newtonsoft.Json;
namespace MQTTnet.TestApp.UniversalWindows
{
public class JsonServerStorage : IMqttServerStorage
{
private readonly string _filename = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "Retained.json");
public async Task SaveRetainedMessagesAsync(IList<MqttApplicationMessage> messages)
{
await Task.CompletedTask;
var json = JsonConvert.SerializeObject(messages);
File.WriteAllText(_filename, json);
}
public async Task<IList<MqttApplicationMessage>> LoadRetainedMessagesAsync()
{
await Task.CompletedTask;
if (!File.Exists(_filename))
{
return new List<MqttApplicationMessage>();
}
try
{
var json = File.ReadAllText(_filename);
return JsonConvert.DeserializeObject<List<MqttApplicationMessage>>(json);
}
catch
{
return new List<MqttApplicationMessage>();
}
}
public void Clear()
{
if (File.Exists(_filename))
{
File.Delete(_filename);
}
}
}
}