using Microsoft.AspNetCore.Mvc; using LTEMvcApp.Models; using LTEMvcApp.Services; using Microsoft.Extensions.Logging; namespace LTEMvcApp.Controllers { /// /// 客户端管理控制器 - 负责客户端的基本管理功能 /// [ApiController] [Route("api/[controller]")] public class ClientController : ControllerBase { private readonly WebSocketManagerService _webSocketManager; private readonly ILogger _logger; public ClientController(WebSocketManagerService webSocketManager, ILogger logger) { _webSocketManager = webSocketManager; _logger = logger; } /// /// 获取所有客户端状态 /// /// 客户端状态列表 [HttpGet("states")] public ActionResult> GetClientStates() { _logger.LogInformation("获取所有客户端状态"); var states = _webSocketManager.GetAllClientStates(); return Ok(states); } /// /// 启动客户端 /// /// 客户端名称 /// 操作结果 [HttpPost("{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("{clientName}/stop")] public ActionResult StopClient(string clientName) { var success = _webSocketManager.StopClient(clientName); if (success) return Ok(new { message = $"客户端 '{clientName}' 已停止" }); else return BadRequest($"停止客户端 '{clientName}' 失败"); } /// /// 播放/暂停客户端 /// /// 客户端名称 /// 操作结果 [HttpPost("{clientName}/playpause")] public ActionResult PlayPauseClient(string clientName) { var success = _webSocketManager.PlayPauseClient(clientName); if (success) return Ok(new { message = $"客户端 '{clientName}' 播放/暂停状态已切换" }); else return BadRequest($"切换客户端 '{clientName}' 播放/暂停状态失败"); } /// /// 重置客户端日志 /// /// 客户端名称 /// 操作结果 [HttpPost("{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("{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("{clientName}/logs-config")] public ActionResult SetClientLogsConfig(string clientName, [FromBody] ClientLogsConfig request) { var success = _webSocketManager.SetClientLogsConfig(clientName, request); if (success) { return Ok(new { message = "日志配置已更新" }); } else { return NotFound(new { message = $"客户端 '{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 = "所有客户端已停止" }); } } }