217 lines
7.5 KiB
C#
217 lines
7.5 KiB
C#
|
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);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|