Delete config link in devices if used + mqtt client not retained message

This commit is contained in:
Thomas Fransolet 2021-08-24 20:20:07 +02:00
parent d6fd248b4f
commit 16d4d6335d
4 changed files with 29 additions and 5 deletions

View File

@ -23,14 +23,16 @@ namespace ManagerService.Controllers
private ConfigurationDatabaseService _configurationService;
private SectionDatabaseService _sectionService;
private ResourceDatabaseService _resourceService;
private DeviceDatabaseService _deviceService;
private readonly ILogger<ConfigurationController> _logger;
public ConfigurationController(ILogger<ConfigurationController> logger, ConfigurationDatabaseService configurationService, SectionDatabaseService sectionService, ResourceDatabaseService resourceService)
public ConfigurationController(ILogger<ConfigurationController> logger, ConfigurationDatabaseService configurationService, SectionDatabaseService sectionService, ResourceDatabaseService resourceService, DeviceDatabaseService deviceService)
{
_logger = logger;
_configurationService = configurationService;
_sectionService = sectionService;
_resourceService = resourceService;
_deviceService = deviceService;
}
/// <summary>
@ -197,6 +199,16 @@ namespace ManagerService.Controllers
_configurationService.Remove(id);
// Delete config for all devices
List<Device> devices = _deviceService.GetAllWithConfig(id);
foreach (var device in devices)
{
device.Configuration = null;
device.ConfigurationId = null;
_deviceService.Update(device.Id, device);
}
MqttClientService.PublishMessage($"config/{id}", JsonConvert.SerializeObject(new PlayerMessageDTO() { configChanged = true, isDeleted = true }));
return new ObjectResult("The configuration has been deleted") { StatusCode = 202 };

View File

@ -65,9 +65,14 @@ namespace ManagerService.Controllers
if (id == null)
throw new ArgumentNullException("Param is null");
List<Section> sections = _sectionService.GetAllFromConfiguration(id);
if (_configurationService.IsExist(id))
{
List<Section> sections = _sectionService.GetAllFromConfiguration(id);
return new OkObjectResult(sections.Select(r => r.ToDTO()));
return new OkObjectResult(sections.Select(r => r.ToDTO()));
}
else
return new NotFoundObjectResult("Configuration not found");
}
catch (ArgumentNullException ex)
{

View File

@ -5,6 +5,7 @@ using MQTTnet.Client;
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Disconnecting;
using MQTTnet.Client.Options;
using MQTTnet.Protocol;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
@ -135,8 +136,9 @@ namespace Mqtt.Client.AspNetCore.Services
var mqttMessage = new MqttApplicationMessageBuilder()
.WithTopic(topic)
.WithPayload(message)
.WithExactlyOnceQoS()
.WithRetainFlag()
.WithAtMostOnceQoS()
.WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtMostOnce)
.WithRetainFlag(false)
.Build();
if (mqttClient.IsConnected)

View File

@ -29,6 +29,11 @@ namespace Manager.Services
return _Devices.Find(d => d.Connected).ToList();
}
public List<Device> GetAllWithConfig(string configId)
{
return _Devices.Find(d => d.ConfigurationId == configId).ToList();
}
public Device GetById(string id)
{
return _Devices.Find<Device>(d => d.Id == id).FirstOrDefault();