# 统计配置功能实现说明 ## 概述 本功能实现了通过StatisticsController动态控制统计消息中的`samples`和`rf`参数,支持根据IP地址为不同客户端设置不同的统计配置。 ## 功能特性 ### 1. 全局统计配置 - 设置默认的`samples`和`rf`值 - 所有未配置特定参数的客户端将使用全局默认值 ### 2. 客户端特定配置 - 根据客户端名称或IP地址设置特定的统计参数 - 支持启用/禁用配置 - 可添加描述信息 ### 3. 动态配置管理 - 通过Web界面实时修改配置 - 配置自动保存到`statistics_config.json`文件 - 支持配置列表查看和编辑 ## 文件结构 ### 新增文件 - `Models/StatisticsConfig.cs` - 统计配置模型 - `statistics_config.json` - 统计配置文件 ### 修改文件 - `Services/LTEClientWebSocket.cs` - 添加统计配置支持 - `Services/WebSocketManagerService.cs` - 添加配置管理功能 - `Controllers/StatisticsController.cs` - 添加配置管理API - `Views/Home/StatisticsTest.cshtml` - 添加配置管理界面 ## 核心实现 ### 1. 统计配置模型 ```csharp public class StatisticsConfig { public string IpAddress { get; set; } = string.Empty; public string ClientName { get; set; } = string.Empty; public bool EnableSamples { get; set; } = false; public bool EnableRf { get; set; } = false; public bool IsEnabled { get; set; } = true; public string Description { get; set; } = string.Empty; } public class GlobalStatisticsConfig { public bool DefaultSamples { get; set; } = false; public bool DefaultRf { get; set; } = false; public List ClientConfigs { get; set; } = new List(); } ``` ### 2. WebSocket客户端配置 在`LTEClientWebSocket`类中添加了统计配置字段和方法: ```csharp // 统计配置相关字段 private bool _enableSamples = false; private bool _enableRf = false; // 设置统计配置 public void SetStatisticsConfig(bool enableSamples, bool enableRf) { _enableSamples = enableSamples; _enableRf = enableRf; } // 在UpdateStats方法中使用配置 var msg = new JObject { ["message"] = "stats", ["samples"] = _enableSamples, ["rf"] = _enableRf }; ``` ### 3. 配置管理服务 在`WebSocketManagerService`中添加了配置管理功能: ```csharp // 加载和保存配置 private void LoadStatisticsConfig() private void SaveStatisticsConfig() // 配置管理方法 public GlobalStatisticsConfig GetGlobalStatisticsConfig() public void SetGlobalStatisticsConfig(GlobalStatisticsConfig config) public StatisticsConfig? GetClientStatisticsConfig(string clientName) public void SetClientStatisticsConfig(StatisticsConfig config) public StatisticsConfig? GetStatisticsConfigByIp(string ipAddress) // 应用配置到客户端 private void UpdateClientStatisticsConfig(string clientName) private void UpdateAllClientsStatisticsConfig() ``` ### 4. API接口 在`StatisticsController`中添加了配置管理API: ```csharp [HttpGet] GetGlobalStatisticsConfig() [HttpPost] SetGlobalStatisticsConfig([FromBody] GlobalStatisticsConfig config) [HttpGet] GetClientStatisticsConfig(string clientName) [HttpPost] SetClientStatisticsConfig([FromBody] StatisticsConfig config) [HttpGet] GetStatisticsConfigByIp(string ipAddress) [HttpGet] GetAllClientStatisticsConfigs() ``` ## 使用方法 ### 1. 访问配置界面 访问 `/Home/StatisticsTest` 页面,可以看到统计配置管理界面。 ### 2. 设置全局配置 - 在"全局统计配置"区域设置默认的samples和rf值 - 点击"保存配置"按钮保存 ### 3. 设置客户端特定配置 - 在"客户端特定配置"区域输入客户端信息 - 设置特定的samples和rf值 - 点击"保存配置"按钮保存 ### 4. 查看配置列表 - 在"配置列表"区域可以看到所有已配置的客户端 - 点击"编辑"按钮可以修改现有配置 ## 配置优先级 1. **客户端特定配置** - 如果客户端有特定的配置且启用,则使用该配置 2. **全局默认配置** - 如果客户端没有特定配置,则使用全局默认值 3. **系统默认值** - 如果都没有配置,则使用系统默认值(samples=false, rf=false) ## 配置文件格式 ```json { "defaultSamples": false, "defaultRf": false, "clientConfigs": [ { "ipAddress": "192.168.13.12", "clientName": "TestClient1", "enableSamples": true, "enableRf": false, "isEnabled": true, "description": "测试客户端1 - 启用samples" } ] } ``` ## 注意事项 1. 配置修改后会自动应用到所有已连接的客户端 2. 新连接的客户端会自动应用相应的配置 3. 配置文件会在应用启动时自动加载 4. 配置修改会实时保存到文件,重启应用后配置仍然有效 ## 扩展功能 可以根据需要扩展以下功能: - 配置模板管理 - 配置导入/导出 - 配置版本控制 - 配置变更日志 - 批量配置操作