using Serein.Library.Api; using Serein.Library.Utils; using System; using System.Threading.Tasks; namespace Serein.Proto.WebSocket.Handle { /// /// 消息处理上下文 /// public class WebSocketMsgContext : IDisposable { public WebSocketMsgContext(Func sendAsync) { _sendAsync = sendAsync; } public void Dispose() { MsgRequest = null; MsgTheme = null; MsgId = null; MsgData = null; MsgData = null; _sendAsync = null; } /// /// 标记是否已经处理,如果是,则提前退出 /// public bool Handle { get => _handle; set{ if(value) { Dispose(); _handle = value; } } } public bool _handle = false; /// /// 消息本体(IJsonToken) /// public IJsonToken MsgRequest { get; set; } /// /// 此次消息请求的主题 /// public string MsgTheme { get; set; } /// /// 此次消息附带的ID /// public string MsgId { get; set; } /// /// 此次消息的数据 /// public IJsonToken MsgData { get; set; } private Func _sendAsync; /// /// 发送消息 /// /// /// public async Task SendAsync(string msg) { await _sendAsync.Invoke(msg); } /// /// 返回消息 /// /// /// /// /// public async Task RepliedAsync(WebSocketHandleModuleConfig moduleConfig, WebSocketMsgContext context, object data) { if (moduleConfig.IsResponseUseReturn) { var responseContent = JsonHelper.Serialize(data); await SendAsync(responseContent); } else { IJsonToken jsonData; jsonData = JsonHelper.Object(obj => { obj[moduleConfig.MsgIdJsonKey] = context.MsgId; obj[moduleConfig.ThemeJsonKey] = context.MsgTheme; obj[moduleConfig.DataJsonKey] = data is null ? null : JsonHelper.FromObject(data); }); var msg = jsonData.ToString(); //Console.WriteLine($"[{msgId}] => {theme}"); await SendAsync(msg); } } } }