using Chat.Framework.WXSdk.Implement; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Api.Framework.Cps.CefSharp1 { class DouyinSendOrder { } public class DouyinPackHist : IRunable { public DouyinPackHist() { ThreadExcutor.RegisterIntervalObject(this, this, 1000 * 60, false); } class Pack { public DateTime CreateTime { get; set; } public BaseResult BaseResult { get; set; } } //private object mPackDicObj = new object(); private Dictionary mPackDic = new Dictionary(); public bool IsRunning { get; set; } public RegisteredWaitHandle RegisterdHandler { get; set; } public WaitHandle WaitHandler { get; set; } private BaseResult _GetResultMsg(string msgId) { try { lock (mPackDic) { //Thread.Sleep(10); BaseResult buf = null; try { if (mPackDic.ContainsKey(msgId)) { buf = mPackDic[msgId].BaseResult; mPackDic.Remove(msgId); return buf; } } catch (Exception ee) { } return buf; } } catch (Exception) { } return null; } public void Run(object state, bool timedOut) { if (IsRunning) return; try { IsRunning = true; var t = DateTime.Now.AddMinutes(-5); var list = mPackDic.ToList().Where(f => f.Value.CreateTime < t);//5分钟前的包,直接忽略 foreach (var item in list) if (mPackDic.ContainsKey(item.Key)) mPackDic.Remove(item.Key); } catch (Exception) { } finally { IsRunning = false; } } public void Dispose() { } /// /// 设置接收数据包 /// /// /// public void SetResult(BaseResult msg) { try { lock (mPackDic) { Console.WriteLine("add" + msg.MsgId); if (mPackDic.ContainsKey(msg.MsgId)) mPackDic.Add(msg.MsgId, new Pack() { BaseResult = msg }); else mPackDic[msg.MsgId] = new Pack() { BaseResult = msg }; } } catch (Exception) { } } /// /// 获取接收数据包 /// /// msgId /// public Task GetResult(string _msg_id) { var msg_id = _msg_id; return Task.Factory.StartNew(delegate () { try { Console.WriteLine($"get {msg_id}"); DateTime end_time = DateTime.Now.AddSeconds(5); while (end_time > DateTime.Now) { var r = _GetResultMsg(msg_id); if (r != null) return r; Thread.Sleep(20); } } catch (Exception) { } return null; }); } } public class DouyinPool { public static DouyinPackHist PackHist { get; private set; } = new DouyinPackHist(); } }