using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Serein.Library.Network.WebSocketCommunication.Handle { /// /// 消息处理上下文 /// public class WebSocketMsgContext { public WebSocketMsgContext(Func sendAsync) { this._sendAsync = sendAsync; } /// /// 标记是否已经处理,如果是,则提前退出 /// public bool Handle { get; set; } /// /// 消息本体(文本) /// public string Msg { get; set; } /// /// 消息本体(JObject) /// public JObject JsonObject { get; set; } /// /// 此次消息请求的主题 /// public string MsgTheme { get; set; } /// /// 此次消息附带的ID /// public string MsgId { get; set; } /// /// 此次消息的数据 /// public JObject 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) { JObject jsonData; if (data is null) { jsonData = new JObject() { [moduleConfig.MsgIdJsonKey] = context.MsgId, [moduleConfig.ThemeJsonKey] = context.MsgTheme, }; } else { JToken dataToken; if (data is System.Collections.IEnumerable || data is Array) { dataToken = JArray.FromObject(data); } else { dataToken = JObject.FromObject(data); } jsonData = new JObject() { [moduleConfig.MsgIdJsonKey] = context.MsgId, [moduleConfig.ThemeJsonKey] = context.MsgTheme, [moduleConfig.DataJsonKey] = dataToken }; } var msg = jsonData.ToString(); //Console.WriteLine($"[{msgId}] => {theme}"); await SendAsync(msg); } } }