Files
DMS/DMS.Application/Services/MqttManagementService.cs

113 lines
3.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using AutoMapper;
using DMS.Application.DTOs;
using DMS.Application.DTOs.Events;
using DMS.Core.Models;
using DMS.Application.Interfaces;
using DMS.Core.Interfaces;
using DMS.Core.Enums;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Threading.Tasks;
using System;
namespace DMS.Application.Services;
/// <summary>
/// MQTT管理服务负责MQTT相关的业务逻辑。
/// </summary>
public class MqttManagementService
{
private readonly IMqttAppService _mqttAppService;
private readonly ConcurrentDictionary<int, MqttServerDto> _mqttServers;
/// <summary>
/// 当MQTT服务器数据发生变化时触发
/// </summary>
public event EventHandler<MqttServerChangedEventArgs> MqttServerChanged;
public MqttManagementService(IMqttAppService mqttAppService,
ConcurrentDictionary<int, MqttServerDto> mqttServers)
{
_mqttAppService = mqttAppService;
_mqttServers = mqttServers;
}
/// <summary>
/// 异步根据ID获取MQTT服务器DTO。
/// </summary>
public async Task<MqttServerDto> GetMqttServerByIdAsync(int id)
{
return await _mqttAppService.GetMqttServerByIdAsync(id);
}
/// <summary>
/// 异步获取所有MQTT服务器DTO列表。
/// </summary>
public async Task<List<MqttServerDto>> GetAllMqttServersAsync()
{
return await _mqttAppService.GetAllMqttServersAsync();
}
/// <summary>
/// 异步创建一个新的MQTT服务器。
/// </summary>
public async Task<int> CreateMqttServerAsync(MqttServerDto mqttServerDto)
{
return await _mqttAppService.CreateMqttServerAsync(mqttServerDto);
}
/// <summary>
/// 异步更新一个已存在的MQTT服务器。
/// </summary>
public async Task UpdateMqttServerAsync(MqttServerDto mqttServerDto)
{
await _mqttAppService.UpdateMqttServerAsync(mqttServerDto);
}
/// <summary>
/// 异步删除一个MQTT服务器。
/// </summary>
public async Task DeleteMqttServerAsync(int id)
{
await _mqttAppService.DeleteMqttServerAsync(id);
}
/// <summary>
/// 在内存中添加MQTT服务器
/// </summary>
public void AddMqttServerToMemory(MqttServerDto mqttServerDto)
{
if (_mqttServers.TryAdd(mqttServerDto.Id, mqttServerDto))
{
OnMqttServerChanged(new MqttServerChangedEventArgs(DataChangeType.Added, mqttServerDto));
}
}
/// <summary>
/// 在内存中更新MQTT服务器
/// </summary>
public void UpdateMqttServerInMemory(MqttServerDto mqttServerDto)
{
_mqttServers.AddOrUpdate(mqttServerDto.Id, mqttServerDto, (key, oldValue) => mqttServerDto);
OnMqttServerChanged(new MqttServerChangedEventArgs(DataChangeType.Updated, mqttServerDto));
}
/// <summary>
/// 在内存中删除MQTT服务器
/// </summary>
public void RemoveMqttServerFromMemory(int mqttServerId)
{
if (_mqttServers.TryRemove(mqttServerId, out var mqttServerDto))
{
OnMqttServerChanged(new MqttServerChangedEventArgs(DataChangeType.Deleted, mqttServerDto));
}
}
/// <summary>
/// 触发MQTT服务器变更事件
/// </summary>
protected virtual void OnMqttServerChanged(MqttServerChangedEventArgs e)
{
MqttServerChanged?.Invoke(this, e);
}
}