using Microsoft.AspNetCore.Mvc; using LTEMvcApp.Models; using LTEMvcApp.Services; using Newtonsoft.Json.Linq; using Microsoft.Extensions.Logging; namespace LTEMvcApp.Controllers { /// /// WebSocket控制器 - 提供LTE客户端WebSocket管理API /// [ApiController] [Route("api/[controller]")] public class WebSocketController : ControllerBase { private readonly WebSocketManagerService _webSocketManager; private readonly ILogger _logger; public WebSocketController(WebSocketManagerService webSocketManager, ILogger logger) { _webSocketManager = webSocketManager; _logger = logger; } /// /// 获取所有客户端状态 /// /// 客户端状态列表 [HttpGet("clients")] public ActionResult> GetClientStates() { _logger.LogInformation("获取所有客户端状态"); var states = _webSocketManager.GetAllClientStates(); return Ok(states); } /// /// 获取客户端配置 /// /// 客户端名称 /// 客户端配置 [HttpGet("clients/{clientName}/config")] public ActionResult GetClientConfig(string clientName) { var config = _webSocketManager.GetClientConfig(clientName); if (config == null) return NotFound($"客户端 '{clientName}' 不存在"); return Ok(config); } /// /// 获取所有客户端配置 /// /// 客户端配置列表 [HttpGet("configs")] public ActionResult> GetAllConfigs() { var configs = _webSocketManager.GetAllClientConfigs(); return Ok(configs); } /// /// 添加客户端配置 /// /// 客户端配置 /// 操作结果 [HttpPost("configs")] public ActionResult AddClientConfig([FromBody] ClientConfig config) { if (string.IsNullOrEmpty(config.Name)) return BadRequest("客户端名称不能为空"); var success = _webSocketManager.AddClientConfig(config); if (success) return Ok(new { message = $"客户端 '{config.Name}' 配置已添加" }); else return BadRequest("添加客户端配置失败"); } /// /// 启动客户端 /// /// 客户端名称 /// 操作结果 [HttpPost("clients/{clientName}/start")] public ActionResult StartClient(string clientName) { _logger.LogInformation($"API请求: 启动客户端 {clientName}"); var success = _webSocketManager.StartClient(clientName); if (success) { _logger.LogInformation($"客户端 {clientName} 启动成功"); return Ok(new { message = $"客户端 '{clientName}' 已启动" }); } else { _logger.LogWarning($"客户端 {clientName} 启动失败"); return BadRequest($"启动客户端 '{clientName}' 失败"); } } /// /// 停止客户端 /// /// 客户端名称 /// 操作结果 [HttpPost("clients/{clientName}/stop")] public ActionResult StopClient(string clientName) { var success = _webSocketManager.StopClient(clientName); if (success) return Ok(new { message = $"客户端 '{clientName}' 已停止" }); else return BadRequest($"停止客户端 '{clientName}' 失败"); } /// /// 播放/暂停客户端 /// /// 客户端名称 /// 操作结果 [HttpPost("clients/{clientName}/playpause")] public ActionResult PlayPauseClient(string clientName) { var success = _webSocketManager.PlayPauseClient(clientName); if (success) return Ok(new { message = $"客户端 '{clientName}' 播放/暂停状态已切换" }); else return BadRequest($"切换客户端 '{clientName}' 播放/暂停状态失败"); } /// /// 重置客户端日志 /// /// 客户端名称 /// 操作结果 [HttpPost("clients/{clientName}/reset-logs")] public ActionResult ResetClientLogs(string clientName) { var success = _webSocketManager.ResetClientLogs(clientName); if (success) return Ok(new { message = $"客户端 '{clientName}' 日志已重置" }); else return BadRequest($"重置客户端 '{clientName}' 日志失败"); } /// /// 获取客户端日志 /// /// 客户端名称 /// 日志数量限制 /// 日志列表 [HttpGet("clients/{clientName}/logs")] public ActionResult?> GetClientLogs(string clientName, [FromQuery] int limit = 100) { var logs = _webSocketManager.GetClientLogs(clientName); if (logs == null) return NotFound($"客户端 '{clientName}' 不存在或未连接"); // 限制返回的日志数量 var limitedLogs = logs.TakeLast(limit).ToList(); return Ok(limitedLogs); } /// /// 设置客户端日志配置 /// /// 客户端名称 /// 日志配置请求 /// 操作结果 [HttpPost("clients/{clientName}/logs-config")] public ActionResult SetClientLogsConfig(string clientName, [FromBody] LogsConfigRequest request) { var success = _webSocketManager.SetClientLogsConfig(clientName, request.Config, request.Save); if (success) return Ok(new { message = $"客户端 '{clientName}' 日志配置已更新" }); else return BadRequest($"更新客户端 '{clientName}' 日志配置失败"); } /// /// 发送消息到客户端 /// /// 客户端名称 /// 消息内容 /// 操作结果 [HttpPost("clients/{clientName}/send-message")] public ActionResult SendMessage(string clientName, [FromBody] JObject message) { var messageId = _webSocketManager.SendMessageToClient(clientName, message); if (messageId >= 0) return Ok(new { messageId, message = $"消息已发送到客户端 '{clientName}'" }); else return BadRequest($"发送消息到客户端 '{clientName}' 失败"); } /// /// 获取连接统计信息 /// /// 统计信息 [HttpGet("statistics")] public ActionResult GetStatistics() { var stats = _webSocketManager.GetConnectionStatistics(); return Ok(stats); } /// /// 启动所有已配置的客户端 /// /// 操作结果 [HttpPost("start-all")] public ActionResult StartAllClients() { _webSocketManager.StartAllConfiguredClients(); return Ok(new { message = "所有已配置的客户端已启动" }); } /// /// 停止所有客户端 /// /// 操作结果 [HttpPost("stop-all")] public ActionResult StopAllClients() { _webSocketManager.StopAllClients(); return Ok(new { message = "所有客户端已停止" }); } /// /// 移除客户端配置 /// /// 客户端名称 /// 操作结果 [HttpDelete("configs/{clientName}")] public ActionResult RemoveClientConfig(string clientName) { var success = _webSocketManager.RemoveClientConfig(clientName); if (success) return Ok(new { message = $"客户端 '{clientName}' 配置已移除" }); else return BadRequest($"移除客户端 '{clientName}' 配置失败"); } } /// /// 日志配置请求 /// public class LogsConfigRequest { /// /// 日志配置 /// public Dictionary Config { get; set; } = new(); /// /// 是否保存配置 /// public bool Save { get; set; } = false; } }