139 lines
3.9 KiB
C#
139 lines
3.9 KiB
C#
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<string, Pack> mPackDic = new Dictionary<string, Pack>();
|
||
|
||
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()
|
||
{
|
||
|
||
}
|
||
/// <summary>
|
||
/// 设置接收数据包
|
||
/// </summary>
|
||
/// <param name="msg_id"></param>
|
||
/// <param name="msg"></param>
|
||
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)
|
||
{ }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取接收数据包
|
||
/// </summary>
|
||
/// <param name="_msg_id">msgId</param>
|
||
/// <returns></returns>
|
||
public Task<BaseResult> GetResult(string _msg_id)
|
||
{
|
||
var msg_id = _msg_id;
|
||
return Task.Factory.StartNew<BaseResult>(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();
|
||
}
|
||
}
|