using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Chat.Framework.WXSdk.Implement { internal class HeadPack_Hook : IRunable { public HeadPack_Hook() { ThreadExcutor.RegisterIntervalObject(this, this, 1000 * 30, false); } public bool IsRunning { get; set; } public RegisteredWaitHandle RegisterdHandler { get; set; } public WaitHandle WaitHandler { get; set; } public void Dispose() { } public void Run(object state, bool timedOut) { if (IsRunning) return; try { IsRunning = true; CheckHead(state); } catch (Exception ex) { } finally { IsRunning = false; } } private void CheckHead(object state) { try { var wechats = ChatClient.WXClient.Values.Where(f => f.WeixinType == WeixinType.Hook微信 && f.Status == WxStatus.在线).ToArray(); foreach (WXClientImpl_HOOK client in wechats) { if (client != null) { try { //LogHelper.GetSingleObj().Info("", $"获取HeartBreakTime = {client.HeartBreakTime},Uin:{client.User.Uin},{client.User.Nick}({client.WeixinHao})"); var span = DateTime.Now - client.HeartBreakTime; if (span.TotalMinutes > 6) { LogHelper.GetSingleObj().Info("", $"退出咯: 间隔:{span.TotalMinutes}分,{client.HeartBreakTime},Uin:{client.User.Uin},{client.User.Nick}({client.WeixinHao})"); //client.Status = WxStatus.已掉线; client.HeartBreakTime = DateTime.MinValue; client.ChangeStatus(WxStatus.已掉线); //client.Close(); } else client.Status = WxStatus.在线; } catch (Exception) { } } } var qywechats = ChatClient.WXClient.Values.Where(f => f.WeixinType == WeixinType.QYHook微信 && f.Status == WxStatus.在线).ToArray(); foreach (WXClientImpl_QYHOOK client in qywechats) { if (client != null) { try { var span = DateTime.Now - client.HeartBreakTime; if (span.TotalMinutes > 6) { client.Status = WxStatus.已掉线; client.HeartBreakTime = DateTime.MinValue; client.ChangeStatus(client.Status); //client.Close(); } else client.Status = WxStatus.在线; } catch (Exception) { } } } } catch (Exception ex) { } } } }