using AutoMapper;
using DMS.Application.Interfaces;
using DMS.Application.Interfaces.Management;
using DMS.Core.Enums;
using DMS.WPF.Interfaces;
using DMS.WPF.ViewModels;
using DMS.WPF.ItemViewModel;
using DMS.Core.Models;
using DMS.Application.DTOs;
namespace DMS.WPF.Services;
///
/// MQTT数据服务类,负责管理MQTT服务器相关的数据和操作。
///
public class MqttDataService : IMqttDataService
{
private readonly IMapper _mapper;
private readonly IAppDataStorageService _appDataStorageService;
private readonly IMqttManagementService _mqttManagementService;
private readonly IMenuDataService _menuDataService;
private readonly IMenuManagementService _menuManagementServiceImpl;
private readonly IDataStorageService _dataStorageService;
///
/// MqttDataService类的构造函数。
///
/// AutoMapper 实例。
/// MQTT应用服务实例。
public MqttDataService(IMapper mapper, IAppDataStorageService appDataStorageService, IMqttManagementService mqttManagementService, IMenuDataService menuDataService, IMenuManagementService menuManagementServiceImpl, IDataStorageService dataStorageService)
{
_mapper = mapper;
_appDataStorageService = appDataStorageService;
_mqttManagementService = mqttManagementService;
_menuDataService = menuDataService;
_menuManagementServiceImpl = menuManagementServiceImpl;
_dataStorageService = dataStorageService;
}
///
/// 加载所有MQTT服务器数据。
///
public async Task LoadMqttServers()
{
try
{
// 加载MQTT服务器数据
foreach (var mqttServer in _appDataStorageService.MqttServers.Values)
{
_dataStorageService.MqttServers.TryAdd(mqttServer.Id, _mapper.Map(mqttServer));
}
}
catch (Exception ex)
{
// 记录异常或处理错误
Console.WriteLine($"加载MQTT服务器数据时发生错误: {ex.Message}");
}
}
///
/// 添加MQTT服务器。
///
public async Task AddMqttServer(MqttServerItem mqttServer)
{
var addMqttServer = await _mqttManagementService.CreateMqttServerAsync(_mapper.Map(mqttServer));
MqttServerItem mqttServerItem = _mapper.Map(addMqttServer);
_dataStorageService.MqttServers.Add(mqttServerItem.Id, mqttServerItem);
var mqttRootMenu = _dataStorageService.Menus.FirstOrDefault(m => m.Header == "Mqtt服务器");
if (mqttRootMenu is not null)
{
var mqttServerMenu = new MenuBean()
{
Header = mqttServerItem.ServerName,
TargetId = mqttServerItem.Id,
ParentId = mqttRootMenu.Id,
Icon = "\uE753", // 使用设备图标
MenuType = MenuType.MqttServerMenu,
TargetViewKey = nameof(MqttServerDetailViewModel),
};
await _menuDataService.AddMenuItem(_mapper.Map