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(); } public Dictionary 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); } /// /// 记录QQ重新登录 /// Dictionary QQReLoginDic = new Dictionary(); public event EventHandler 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) { } } /// /// 登陆状态发生改变 /// public event EventHandler 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); } /// /// 收到好友消息 /// public event EventHandler QQReceiveFriendMsgEvents; internal void OnEvent(QQReceiveFriendMsgEvents e) { if (QQReceiveFriendMsgEvents != null) QQReceiveFriendMsgEvents.Invoke(e.QQClient, e); } /// /// 日志消息 /// public event EventHandler QQLogEvents; internal void OnEvent(QQLogEvents e) { if (QQLogEvents != null) QQLogEvents.Invoke(e.QQClient, e); } /// /// 收到群消息 /// public event EventHandler QQReceiveGroupMsgEvents; internal void OnEvent(QQReceiveGroupMsgEvents e) { if (QQReceiveGroupMsgEvents != null) QQReceiveGroupMsgEvents.Invoke(e.QQClient, e); } /// /// 有人添加我为好友,需要审核 /// public event EventHandler QQAddMeNeedAuthEvents; internal void OnEvent(QQAddMeNeedAuthEvents e) { if (QQAddMeNeedAuthEvents != null) QQAddMeNeedAuthEvents.Invoke(e.QQClient, e); } /// /// 有人添加我为好友 /// public event EventHandler QQNewFriendEvents; internal void OnEvent(QQNewFriendEvents e) { if (QQNewFriendEvents != null) QQNewFriendEvents.Invoke(e.QQClient, e); } /// /// QQ群新增成员 /// public event EventHandler QQNewGroupMemberEvents; internal void OnEvent(QQNewGroupMemberEvents e) { if (QQNewGroupMemberEvents != null) QQNewGroupMemberEvents.Invoke(e.QQClient, e); } /// /// 有人进群,需要审核 /// public event EventHandler QQAddToClusterNeedAuthEvents; internal void OnEvent(QQAddToClusterNeedAuthEvents e) { if (QQAddToClusterNeedAuthEvents != null) QQAddToClusterNeedAuthEvents.Invoke(e.QQClient, e); } /// /// 有人添加我为好友,需要审核 /// public event EventHandler QQVerifyCodeEvents; internal void OnEvent(QQVerifyCodeEvents e) { if (QQVerifyCodeEvents != null) QQVerifyCodeEvents.Invoke(e.QQClient, e); } } }