old_flsystem/类库/Chat.Framework/QQSdk/QQPool.cs

217 lines
7.5 KiB
C#
Raw Permalink Normal View History

2022-09-20 03:10:29 +00:00
using Chat.Framework.QQSdk.Events;
using Chat.Framework.QQSdk.PCQQ;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Chat.Framework.QQSdk
{
public class QQPool
{
public QQPool()
{
if (QQClients == null)
QQClients = new Dictionary<uint, QQBase>();
}
public Dictionary<uint, QQBase> QQClients { get; private set; }
public void Login(string QQ, bool autoLogin = false)
{
QQBase pcclient = null;
if (!string.IsNullOrEmpty(QQ))
{
var _qq = uint.Parse(QQ);
if (QQClients.ContainsKey(_qq)) pcclient = QQClients[_qq];
if (autoLogin)
{
pcclient.AutoLogin(); return;
}
}
pcclient = new PCQQ.QQClient();
pcclient.ShowLogin(QQ);
//QQClient pcclient = null;
//var qq = string.IsNullOrWhiteSpace(QQ) ? 0 : uint.Parse(QQ);
//if (qq != 0 && QQClients.ContainsKey(qq))
// pcclient = QQClients[qq] as QQClient;
//else
// pcclient = new QQClient();
//pcclient.Login(qq);
}
/// <summary>
/// 记录QQ重新登录
/// </summary>
Dictionary<uint, DateTime> QQReLoginDic = new Dictionary<uint, DateTime>();
public event EventHandler<QQLostConnectionEvents> QQLostConnectionEvent;
internal void OnEvent(QQLostConnectionEvents e)
{
try
{
if (QQLostConnectionEvent != null)
{
QQLostConnectionEvent.Invoke(e.QQClient, e);
}
OnEvent(new QQLogEvents(e.QQClient) { Message = e.Message });
var time = this.QQReLoginDic.ContainsKey(e.QQClient.QQ) ? this.QQReLoginDic[e.QQClient.QQ] : DateTime.MinValue;
//防止死循环
if (time < DateTime.Now.AddMinutes(-2))
{
this.QQReLoginDic[e.QQClient.QQ] = DateTime.Now;
Task.Factory.StartNew(delegate
{
try
{
//自动登录
//var c = e.QQClient as PCQQClient;
//if (c != null) c.AutoLogin();
}
catch (Exception)
{
}
});
}
else
{
e.QQClient.Logout();
OnEvent(new QQLoginChangeEvents(e.QQClient, false, "心跳包异常,已掉线!"));
}
}
catch (Exception)
{ }
}
/// <summary>
/// 登陆状态发生改变
/// </summary>
public event EventHandler<QQLoginChangeEvents> LoginChangeEvent;
public void OnEvent(QQLoginChangeEvents e)
{
if (e.IsLogin)
{
try
{
var c = Grant.Framework.GrantClient.Get().Login(e.QQClient.QQ.ToString(), e.QQClient.Nickname, 1002, "3782F5365510E5B25F4FA6FFC04255CB");
e.QQClient.EndTime = DateTime.Parse(c.endTime);
e.QQClient.IsLogin = true;
if (e.Message.Contains("登陆成功"))
e.QQClient.RegisterEvent();
else
e.QQClient.UnRegisterEvent();
}
catch (Exception ex)
{
e.QQClient.UnRegisterEvent();
e.Message = ex.Message;
e.QQClient.IsLogin = false;
if (QQClients.ContainsKey(e.QQClient.QQ))
{
QQBase qqbase = null;
QQClients.TryRemove(e.QQClient.QQ, out qqbase);
}
OnEvent(new QQLogEvents(e.QQClient) { Message = $"QQ:{e.QQClient.QQ}->{e.Message}" });
return;
}
if (QQClients.ContainsKey(e.QQClient.QQ))
{
QQBase qqbase = null;
QQClients.TryRemove(e.QQClient.QQ, out qqbase);
}
QQClients.TryAdd(e.QQClient.QQ, e.QQClient);
}
else if (!e.IsLogin && (e.Message == "账号注销" || e.Message.StartsWith("授权异常") || e.Message == "登录失败"))
{
e.QQClient.IsLogin = false;
e.QQClient.UnRegisterEvent();
OnEvent(new QQLogEvents(e.QQClient) { Message = $"QQ{e.QQClient.QQ}->{e.Message}" });
}
if (LoginChangeEvent != null) LoginChangeEvent.Invoke(e.QQClient, e);
}
/// <summary>
/// 收到好友消息
/// </summary>
public event EventHandler<QQReceiveFriendMsgEvents> QQReceiveFriendMsgEvents;
internal void OnEvent(QQReceiveFriendMsgEvents e)
{
if (QQReceiveFriendMsgEvents != null) QQReceiveFriendMsgEvents.Invoke(e.QQClient, e);
}
/// <summary>
/// 日志消息
/// </summary>
public event EventHandler<QQLogEvents> QQLogEvents;
internal void OnEvent(QQLogEvents e)
{
if (QQLogEvents != null) QQLogEvents.Invoke(e.QQClient, e);
}
/// <summary>
/// 收到群消息
/// </summary>
public event EventHandler<QQReceiveGroupMsgEvents> QQReceiveGroupMsgEvents;
internal void OnEvent(QQReceiveGroupMsgEvents e)
{
if (QQReceiveGroupMsgEvents != null) QQReceiveGroupMsgEvents.Invoke(e.QQClient, e);
}
/// <summary>
/// 有人添加我为好友,需要审核
/// </summary>
public event EventHandler<QQAddMeNeedAuthEvents> QQAddMeNeedAuthEvents;
internal void OnEvent(QQAddMeNeedAuthEvents e)
{
if (QQAddMeNeedAuthEvents != null) QQAddMeNeedAuthEvents.Invoke(e.QQClient, e);
}
/// <summary>
/// 有人添加我为好友
/// </summary>
public event EventHandler<QQNewFriendEvents> QQNewFriendEvents;
internal void OnEvent(QQNewFriendEvents e)
{
if (QQNewFriendEvents != null) QQNewFriendEvents.Invoke(e.QQClient, e);
}
/// <summary>
/// QQ群新增成员
/// </summary>
public event EventHandler<QQNewGroupMemberEvents> QQNewGroupMemberEvents;
internal void OnEvent(QQNewGroupMemberEvents e)
{
if (QQNewGroupMemberEvents != null) QQNewGroupMemberEvents.Invoke(e.QQClient, e);
}
/// <summary>
/// 有人进群,需要审核
/// </summary>
public event EventHandler<QQAddToClusterNeedAuthEvents> QQAddToClusterNeedAuthEvents;
internal void OnEvent(QQAddToClusterNeedAuthEvents e)
{
if (QQAddToClusterNeedAuthEvents != null) QQAddToClusterNeedAuthEvents.Invoke(e.QQClient, e);
}
/// <summary>
/// 有人添加我为好友,需要审核
/// </summary>
public event EventHandler<QQVerifyCodeEvents> QQVerifyCodeEvents;
internal void OnEvent(QQVerifyCodeEvents e)
{
if (QQVerifyCodeEvents != null) QQVerifyCodeEvents.Invoke(e.QQClient, e);
}
}
}