diff --git a/LTEMvcApp/Controllers/MessageController.cs b/LTEMvcApp/Controllers/MessageController.cs index 7243724..8660a31 100644 --- a/LTEMvcApp/Controllers/MessageController.cs +++ b/LTEMvcApp/Controllers/MessageController.cs @@ -34,8 +34,8 @@ namespace LTEMvcApp.Controllers /// /// SSE推送客户端消息流 /// - [HttpGet("{clientName}/stream")] - public async Task StreamClientMessages(string clientName) + [HttpGet("{address}/stream")] + public async Task StreamClientMessages(string address) { try { @@ -44,16 +44,16 @@ namespace LTEMvcApp.Controllers Response.Headers.Append("Connection", "keep-alive"); Response.Headers.Append("Access-Control-Allow-Origin", "*"); - var client = _webSocketManager.GetClientInstance(clientName); + var client = _webSocketManager.GetClientInstance(address); if (client == null) { - await SendSseEvent("error", new { message = "客户端未连接或不存在", clientName }); + await SendSseEvent("error", new { message = "客户端未连接或不存在", address }); return; } await SendSseEvent("open", new { message = "成功连接到服务器事件流", - clientName, + address, timestamp = DateTime.UtcNow }); await Response.Body.FlushAsync(HttpContext.RequestAborted); @@ -62,8 +62,8 @@ namespace LTEMvcApp.Controllers int lastReceivedCount = 0; var cancellationToken = HttpContext.RequestAborted; - var sentLogFilePath = Path.Combine(_logsDirectory, $"{clientName}_sent_messages.log"); - var receivedLogFilePath = Path.Combine(_logsDirectory, $"{clientName}_received_messages.log"); + var sentLogFilePath = Path.Combine(_logsDirectory, $"{address}_sent_messages.log"); + var receivedLogFilePath = Path.Combine(_logsDirectory, $"{address}_received_messages.log"); while (!cancellationToken.IsCancellationRequested) { @@ -79,7 +79,7 @@ namespace LTEMvcApp.Controllers var newMessages = sentMessages.Skip(lastSentCount).ToList(); if (newMessages.Any()) { - await LogMessagesToFile(sentLogFilePath, newMessages, "SENT", clientName); + await LogMessagesToFile(sentLogFilePath, newMessages, "SENT", address); await SendSseEvent("update", new { type = "sent", messages = newMessages, @@ -100,7 +100,7 @@ namespace LTEMvcApp.Controllers var newMessages = receivedMessages.Skip(lastReceivedCount).ToList(); if (newMessages.Any()) { - await LogMessagesToFile(receivedLogFilePath, newMessages, "RECEIVED", clientName); + await LogMessagesToFile(receivedLogFilePath, newMessages, "RECEIVED", address); await SendSseEvent("update", new { type = "received", messages = newMessages, @@ -124,11 +124,11 @@ namespace LTEMvcApp.Controllers } catch (Exception ex) { - _logger.LogError(ex, "StreamClientMessages 循环中发生错误,客户端: {ClientName}", clientName); + _logger.LogError(ex, "StreamClientMessages 循环中发生错误,客户端: {ClientName}", address); await SendSseEvent("error", new { message = "处理消息流时发生错误", error = ex.Message, - clientName, + address, timestamp = DateTime.UtcNow }); await Response.Body.FlushAsync(cancellationToken); @@ -137,24 +137,24 @@ namespace LTEMvcApp.Controllers } await SendSseEvent("disconnected", new { message = "客户端消息流连接已断开", - clientName, + address, timestamp = DateTime.UtcNow }); await Response.Body.FlushAsync(cancellationToken); } catch (OperationCanceledException) { - _logger.LogInformation("StreamClientMessages 连接被客户端取消,客户端: {ClientName}", clientName); + _logger.LogInformation("StreamClientMessages 连接被客户端取消,客户端: {ClientName}", address); } catch (Exception ex) { - _logger.LogError(ex, "StreamClientMessages 方法执行时发生未处理的异常,客户端: {ClientName}", clientName); + _logger.LogError(ex, "StreamClientMessages 方法执行时发生未处理的异常,客户端: {ClientName}", address); try { await SendSseEvent("fatal_error", new { message = "服务器内部错误", error = ex.Message, - clientName, + address, timestamp = DateTime.UtcNow }); await Response.Body.FlushAsync(); @@ -166,14 +166,14 @@ namespace LTEMvcApp.Controllers /// /// 发送消息到客户端 /// - [HttpPost("{clientName}/send")] - public ActionResult SendMessage(string clientName, [FromBody] JObject message) + [HttpPost("{address}/send")] + public ActionResult SendMessage(string address, [FromBody] JObject message) { - var messageId = _webSocketManager.SendMessageToClient(clientName, message); + var messageId = _webSocketManager.SendMessageToClient(address, message); if (messageId >= 0) - return Ok(new { messageId, message = $"消息已发送到客户端 '{clientName}'" }); + return Ok(new { messageId, message = $"消息已发送到客户端 '{address}'" }); else - return BadRequest($"发送消息到客户端 '{clientName}' 失败"); + return BadRequest($"发送消息到客户端 '{address}' 失败"); } /// @@ -195,7 +195,7 @@ namespace LTEMvcApp.Controllers filePath = filePath, size = new FileInfo(filePath).Length, lastModified = System.IO.File.GetLastWriteTime(filePath), - clientName = Path.GetFileNameWithoutExtension(filePath).Replace("_sent_messages", "").Replace("_received_messages", ""), + address = Path.GetFileNameWithoutExtension(filePath).Replace("_sent_messages", "").Replace("_received_messages", ""), type = filePath.Contains("_sent_messages") ? "发送消息" : "接收消息" }) .OrderByDescending(f => f.lastModified) @@ -329,7 +329,7 @@ namespace LTEMvcApp.Controllers } } - private async Task LogMessagesToFile(string logFilePath, List messages, string messageType, string clientName) + private async Task LogMessagesToFile(string logFilePath, List messages, string messageType, string address) { try { @@ -337,7 +337,7 @@ namespace LTEMvcApp.Controllers var timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); foreach (var message in messages) { - logBuilder.AppendLine($"[{timestamp}] [{clientName}] [{messageType}] {message}"); + logBuilder.AppendLine($"[{timestamp}] [{address}] [{messageType}] {message}"); logBuilder.AppendLine(new string('-', 80)); } await System.IO.File.AppendAllTextAsync(logFilePath, logBuilder.ToString(), Encoding.UTF8); diff --git a/LTEMvcApp/Views/Home/ClientMessages.cshtml b/LTEMvcApp/Views/Home/ClientMessages.cshtml index cb40f0e..f10d68b 100644 --- a/LTEMvcApp/Views/Home/ClientMessages.cshtml +++ b/LTEMvcApp/Views/Home/ClientMessages.cshtml @@ -1,6 +1,6 @@ @{ ViewData["Title"] = "客户端消息队列"; - var clientName = ViewBag.ClientName as string ?? "TestClient"; + var address = ViewBag.Address as string ?? "TestClient"; }