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

217 lines
7.5 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}
}