From 35c339418d6f841e1a1a733f7eb687f3f36926a7 Mon Sep 17 00:00:00 2001 From: hyh Date: Wed, 4 Jun 2025 16:00:30 +0800 Subject: [PATCH] =?UTF-8?q?websocket=20=E6=8E=A7=E5=88=B6=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E8=BF=94=E5=9B=9E=E5=8F=91=E9=80=81=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Handlers/NotificationMessageHandler.cs | 5 ++- .../Models/ChatMessage.cs | 39 +++++++++++++++++++ .../Models/WebSocketMessage.cs | 7 ++-- .../Services/IncomingMessageProcessor.cs | 6 ++- 4 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 src/CellularManagement.WebSocket/Models/ChatMessage.cs diff --git a/src/CellularManagement.WebSocket/Handlers/NotificationMessageHandler.cs b/src/CellularManagement.WebSocket/Handlers/NotificationMessageHandler.cs index 16e17fc..899e827 100644 --- a/src/CellularManagement.WebSocket/Handlers/NotificationMessageHandler.cs +++ b/src/CellularManagement.WebSocket/Handlers/NotificationMessageHandler.cs @@ -22,7 +22,7 @@ public class NotificationMessageHandler : IWebSocketMessageHandler _logger.LogDebug("原始消息数据:{Data}", System.Text.Encoding.UTF8.GetString(message.Data)); await Task.Delay(100); // 模拟异步处理 - + var response = new WebSocketMessage { ConnectionId = message.ConnectionId, @@ -36,7 +36,8 @@ public class NotificationMessageHandler : IWebSocketMessageHandler timestamp = DateTime.UtcNow } })), - MessageType = System.Net.WebSockets.WebSocketMessageType.Text + MessageType = System.Net.WebSockets.WebSocketMessageType.Text, + NeedQueue = false }; _logger.LogInformation("通知消息处理完成,连接ID:{ConnectionId},响应数据大小:{DataSize}字节", diff --git a/src/CellularManagement.WebSocket/Models/ChatMessage.cs b/src/CellularManagement.WebSocket/Models/ChatMessage.cs new file mode 100644 index 0000000..f77b39f --- /dev/null +++ b/src/CellularManagement.WebSocket/Models/ChatMessage.cs @@ -0,0 +1,39 @@ +using System; + +namespace CellularManagement.WebSocket.Models; + +/// +/// 聊天消息模型 +/// +public class ChatMessage +{ + /// + /// 发送者ID + /// + public string SenderId { get; set; } = string.Empty; + + /// + /// 发送者名称 + /// + public string SenderName { get; set; } = string.Empty; + + /// + /// 消息内容 + /// + public string Content { get; set; } = string.Empty; + + /// + /// 消息类型(私聊/群聊) + /// + public string MessageType { get; set; } = "group"; + + /// + /// 接收者ID(私聊时使用) + /// + public string? ReceiverId { get; set; } + + /// + /// 发送时间 + /// + public DateTime Timestamp { get; set; } = DateTime.UtcNow; +} \ No newline at end of file diff --git a/src/CellularManagement.WebSocket/Models/WebSocketMessage.cs b/src/CellularManagement.WebSocket/Models/WebSocketMessage.cs index bdaacf3..d0fc052 100644 --- a/src/CellularManagement.WebSocket/Models/WebSocketMessage.cs +++ b/src/CellularManagement.WebSocket/Models/WebSocketMessage.cs @@ -12,8 +12,7 @@ public record WebSocketMessage public WebSocketMessageType MessageType { get; init; } // 消息类型 public DateTime Timestamp { get; init; } = DateTime.UtcNow; // 时间戳 public int Priority { get; init; } = 0; // 优先级 - - public bool IsComplete { get; set; } - - public bool IsError { get; set; } + public bool IsComplete { get; set; } // 消息是否完整 + public bool IsError { get; set; } // 是否是错误消息 + public bool NeedQueue { get; init; } = true; // 是否需要加入队列发送,默认为 true } \ No newline at end of file diff --git a/src/CellularManagement.WebSocket/Services/IncomingMessageProcessor.cs b/src/CellularManagement.WebSocket/Services/IncomingMessageProcessor.cs index 42fbad8..bc314a0 100644 --- a/src/CellularManagement.WebSocket/Services/IncomingMessageProcessor.cs +++ b/src/CellularManagement.WebSocket/Services/IncomingMessageProcessor.cs @@ -218,12 +218,16 @@ public class IncomingMessageProcessor : IDisposable _logger.LogDebug("消息处理完成,连接ID:{ConnectionId},处理结果:{Processed}", message.ConnectionId, processedMessage != null); - if (processedMessage != null) + if (processedMessage?.NeedQueue == true) { // 将处理后的消息入队 await _messageQueueManager.TryQueueOutgoingMessage(processedMessage); _logger.LogDebug("处理后的消息已入队,连接ID:{ConnectionId}", message.ConnectionId); } + else + { + _logger.LogDebug("消息不需要入队或为空,连接ID:{ConnectionId}", message.ConnectionId); + } } catch (Exception ex) {