130 lines
4.6 KiB
C#
130 lines
4.6 KiB
C#
using Api.Framework.SDK;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using WacheCheckUrl.Properties;
|
|
using Chat.Framework;
|
|
|
|
namespace WacheCheckUrl
|
|
{
|
|
public class Class1 : Plugin
|
|
{
|
|
public Class1()
|
|
{
|
|
this.Logo = Resources.检测;
|
|
this.Name = "链接有效性";
|
|
this.Note = "检测链接有效性";
|
|
}
|
|
|
|
public override void Start()
|
|
{
|
|
SDK.WebRequestEvent += SDK_WebRequestEvent;
|
|
}
|
|
|
|
private Dictionary<string, int> dic = new Dictionary<string, int>();
|
|
|
|
private void SDK_WebRequestEvent(object sender, Api.Framework.Events.WebRequestEvents e)
|
|
{
|
|
try
|
|
{
|
|
if (e.Param.ContainsKey("url"))
|
|
{
|
|
var url = e.Param["url"];
|
|
if (string.IsNullOrWhiteSpace(url)) throw new Exception("url不能为空");
|
|
|
|
var wxList = ChatClient.WXClient.Values.Where(f => f.Status == Chat.Framework.WXSdk.WxStatus.在线 && f.WeixinType == Chat.Framework.WXSdk.Implement.WeixinType.Hook微信).ToList();
|
|
if (wxList.Count > 0)
|
|
{
|
|
Random rd = new Random(Guid.NewGuid().GetHashCode());
|
|
int index = rd.Next(wxList.Count);
|
|
|
|
var wx = wxList[index];
|
|
|
|
if (dic.ContainsKey(wx.WeixinHao))
|
|
{
|
|
var sb = new StringBuilder();
|
|
sb.Append("重新获取开始->");
|
|
if (dic[wx.WeixinHao] > 6)
|
|
{
|
|
dic[wx.WeixinHao] = 0;
|
|
}
|
|
rd = new Random(Guid.NewGuid().GetHashCode());
|
|
|
|
if (wxList.Count > 1)
|
|
{
|
|
dic[wx.WeixinHao]++;
|
|
while (true)
|
|
{
|
|
var indexTmp = rd.Next(wxList.Count);
|
|
if (index != indexTmp)
|
|
{
|
|
index = indexTmp;
|
|
sb.Append("重新获取成功A");
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (dic[wx.WeixinHao] > 4)
|
|
{
|
|
dic.Remove(wx.WeixinHao);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sb.Append("重新获取成功B");
|
|
index = rd.Next(wxList.Count);
|
|
}
|
|
|
|
sb.Append("->结束");
|
|
this.OnLog($"{sb}");
|
|
wx = wxList[index];
|
|
}
|
|
|
|
var strb = new StringBuilder();
|
|
var startTime = DateTime.Now;
|
|
var status = wx.CheckUrl(url);
|
|
var endTime = DateTime.Now;
|
|
|
|
strb.AppendLine($"微信:{wx.User.Nick}({wx.User.Username})");
|
|
strb.AppendLine($"开始:{startTime}");
|
|
strb.AppendLine($"结束:{endTime}");
|
|
strb.AppendLine();
|
|
|
|
var totalSeconds = (endTime - startTime).TotalSeconds;
|
|
|
|
strb.AppendLine($"间隔:{totalSeconds}");
|
|
strb.AppendLine($"{url} = {status}");
|
|
|
|
if (totalSeconds > 10)
|
|
{
|
|
if (!dic.ContainsKey(wx.WeixinHao))
|
|
{
|
|
dic[wx.WeixinHao] = 0;
|
|
}
|
|
}
|
|
|
|
this.OnLog($"{strb}");
|
|
e.Send("", status ? 1 : 0);
|
|
}
|
|
else
|
|
throw new Exception("当前没有可用pc协议微信");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
e.Send(ex.Message, -1);
|
|
this.OnLog($"检测链接异常:{ex.Message} - {ex.StackTrace}");
|
|
}
|
|
}
|
|
|
|
public override void Stop()
|
|
{
|
|
SDK.WebRequestEvent -= SDK_WebRequestEvent;
|
|
}
|
|
|
|
|
|
}
|
|
}
|