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;
}
}