old_flsystem/应用/WacheCheckUrl/Class1.cs

130 lines
4.6 KiB
C#
Raw Normal View History

2022-09-20 03:10:29 +00:00
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;
}
}
}