107 lines
3.5 KiB
C#
107 lines
3.5 KiB
C#
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)
|
|
{ }
|
|
}
|
|
|
|
}
|
|
}
|