1 feat(mqtt): 实现MQTT服务器状态管理与事件系统

2
    3 1. 在MqttServer和MqttServerDto模型中添加IsConnect属性,用于跟踪连接状态
    4 2. 重构MqttManagementService服务,使用事件驱动方式管理服务器状态变化
    5 3. 实现MqttServerChangedEventArgs事件参数类,支持区分不同变更类型
    6 4. 在IEventService中添加OnMqttServerChanged事件,实现事件通知机制
    7 5. 优化数据存储结构,将MqttServers从ObservableCollection改为ObservableDictionary
    8 6. 更新MqttServiceManager以正确处理连接状态和事件触发
    9 7. 在WPF层更新UI以响应服务器状态变化
   10 8. 删除不再需要的Helper类(DataServicesHelper, MessageHelper, SiemensHelper)
   11 9. 在NLog配置中添加调试器输出目标以便调试
   12 10. 完善VariableHistoryViewModel防止空引用异常
This commit is contained in:
2025-10-05 00:28:25 +08:00
parent d4562e600e
commit a6fc543e4f
25 changed files with 497 additions and 537 deletions

View File

@@ -48,13 +48,74 @@ public class DataEventService : IDataEventService
// 监听变量值变更事件
_eventService.OnVariableValueChanged += OnVariableValueChanged;
_eventService.OnMqttServerChanged += OnMqttServerChanged;
_appDataCenterService.DataLoaderService.OnLoadDataCompleted += OnLoadDataCompleted;
// 监听日志变更事件
// _appDataCenterService.OnLogChanged += _logDataService.OnNlogChanged;
_logger?.LogInformation("DataEventService 初始化完成");
}
private void OnMqttServerChanged(object? sender, MqttServerChangedEventArgs e)
{
_logger?.LogDebug("接收到Mqtt服务器状态发生了改变服务器名称{mqttName}属性: {mqttProperty}",
e.MqttServer.ServerName, e.PropertyType);
// 在UI线程上更新变量值
App.Current.Dispatcher.BeginInvoke(new Action(() =>
{
//// 查找并更新对应的变量
if (_dataStorageService.MqttServers.TryGetValue(e.MqttServer.Id, out var mqttServerItem))
{
if (e.ChangeType == ActionChangeType.Updated)
{
switch (e.PropertyType)
{
case MqttServerPropertyType.ServerName:
break;
case MqttServerPropertyType.ServerUrl:
break;
case MqttServerPropertyType.Port:
break;
case MqttServerPropertyType.IsConnect:
mqttServerItem.IsConnect=e.MqttServer.IsConnect;
break;
case MqttServerPropertyType.Username:
break;
case MqttServerPropertyType.Password:
break;
case MqttServerPropertyType.IsActive:
break;
case MqttServerPropertyType.SubscribeTopic:
break;
case MqttServerPropertyType.PublishTopic:
break;
case MqttServerPropertyType.ClientId:
break;
case MqttServerPropertyType.MessageFormat:
break;
case MqttServerPropertyType.MessageHeader:
break;
case MqttServerPropertyType.MessageContent:
break;
case MqttServerPropertyType.MessageFooter:
break;
case MqttServerPropertyType.All:
break;
default:
break;
}
}
}
else
{
_logger?.LogWarning("在Mqtt服务器队列中找不到ID为 {MqttServer} 的变量,无法更新值", e.MqttServer.Id);
}
}));
}
private void OnLoadDataCompleted(object? sender, DataLoadCompletedEventArgs e)
{
_logger?.LogDebug("接收到数据加载完成事件,成功: {IsSuccess}", e.IsSuccess);