private void DoGetVerify(string reason, ProcActionFuture future) { if (future.IsCanceled) { return; } var account = Context.Account; var login = Context.GetModule<LoginModule>(QQModuleType.LOGIN); login.GetCaptcha(account.Uin, (sender, Event) => { if (Event.Type == QQActionEventType.EVT_OK) { var verify = new QQNotifyEventArgs.ImageVerify { Type = QQNotifyEventArgs.ImageVerify.VerifyType.LOGIN, Image = (Image) Event.Target, Reason = reason, Future = future }; Context.FireNotify(new QQNotifyEvent(QQNotifyEventType.CAPACHA_VERIFY, verify)); } else if (Event.Type == QQActionEventType.EVT_ERROR) { future.NotifyActionEvent(QQActionEventType.EVT_ERROR, Event.Target); } }); }
public QQActionFuture SendMsg(QQMsg msg, QQActionEventHandler listener) { if (msg.Type == QQMsgType.SESSION_MSG) { ProcActionFuture future = new ProcActionFuture(listener, true); QQStranger stranger = (QQStranger)msg.To; if (string.IsNullOrEmpty(stranger.GroupSig)) { GetSessionMsgSig(stranger, new QQActionEventHandler((sender, Event) => { if (Event.Type == QQActionEventType.EVT_OK) { if (!future.IsCanceled) { DoSendMsg(msg, future.Listener); } } else if (Event.Type == QQActionEventType.EVT_ERROR) { future.NotifyActionEvent(Event.Type, Event.Target); } })); } return future; } else if (msg.Type == QQMsgType.GROUP_MSG || msg.Type == QQMsgType.DISCUZ_MSG) { if (string.IsNullOrEmpty(this.Context.Session.CfaceKey)) { ProcActionFuture future = new ProcActionFuture(listener, true); GetCFaceSig(new QQActionEventHandler((sender, Event) => { if (Event.Type == QQActionEventType.EVT_OK) { if (!future.IsCanceled) { DoSendMsg(msg, future.Listener); } } else if (Event.Type == QQActionEventType.EVT_ERROR) { future.NotifyActionEvent(Event.Type, Event.Target); } })); return future; } } return DoSendMsg(msg, listener); }
private void DoGetLoginSig(ProcActionFuture future) { var login = Context.GetModule<LoginModule>(QQModuleType.LOGIN); login.GetLoginSig((sender, Event) => { if (Event.Type == QQActionEventType.EVT_OK) { DoCheckVerify(future); } else if (Event.Type == QQActionEventType.EVT_ERROR) { future.NotifyActionEvent(QQActionEventType.EVT_ERROR, Event.Target); } }); }
public IQQActionFuture SendMsg(QQMsg msg, QQActionListener listener) { var future = new ProcActionFuture(listener, true); if (msg.Type == QQMsgType.SESSION_MSG) { var stranger = (QQStranger)msg.To; if (string.IsNullOrEmpty(stranger.GroupSig)) { GetSessionMsgSig(stranger, (sender, Event) => { if (Event.Type == QQActionEventType.EvtOK) { DoSendMsg(msg, future.Listener); } else if (Event.Type == QQActionEventType.EvtError) { future.NotifyActionEvent(Event.Type, Event.Target); } }); } return future; } else if (msg.Type == QQMsgType.GROUP_MSG || msg.Type == QQMsgType.DISCUZ_MSG) { if (msg.Type == QQMsgType.GROUP_MSG) { if (msg.Group.Gin == 0) { msg.Group = Context.Store.GetGroupByCode(msg.Group.Code); return future; } } } return DoSendMsg(msg, listener); }
private void DoWebLogin(string verifyCode, ProcActionFuture future) { if (future.IsCanceled) return; var login = Context.GetModule<LoginModule>(QQModuleType.LOGIN); login.WebLogin(Context.Account.Username, Context.Account.Password, Context.Account.Uin, verifyCode, ((sender, Event) => { if (Event.Type == QQActionEventType.EvtOK) { DoCheckLoginSig((string)Event.Target, future); } else if (Event.Type == QQActionEventType.EvtError) { var ex = (QQException)(Event.Target); if (ex.ErrorCode == QQErrorCode.WrongCaptcha) { DoGetVerify(ex.Message, future); } else { future.NotifyActionEvent(QQActionEventType.EvtError, Event.Target); } } })); }
private void DoGetVFWebqq(ProcActionFuture future) { if (future.IsCanceled) return; var login = Context.GetModule<LoginModule>(QQModuleType.LOGIN); login.GetVFWebqq((sender, Event) => { if (Event.Type == QQActionEventType.EvtOK) { DoChannelLogin(future); } else if (Event.Type == QQActionEventType.EvtError) { future.NotifyActionEvent(QQActionEventType.EvtError, Event.Target); } }); }
private void DoGetVerify(string reason, ProcActionFuture future) { if (future.IsCanceled) return; var account = Context.Account; var login = Context.GetModule<LoginModule>(QQModuleType.LOGIN); login.GetCaptcha(account.Uin, (sender, Event) => { if (Event.Type == QQActionEventType.EvtOK) { var verify = new ImageVerify() { Type = ImageVerify.VerifyType.LOGIN, Image = (Image)Event.Target, Reason = reason, Future = future }; Context.FireNotify(new QQNotifyEvent(QQNotifyEventType.CapachaVerify, verify)); } else if (Event.Type == QQActionEventType.EvtError) { future.NotifyActionEvent(QQActionEventType.EvtError, Event.Target); } }); }
private void DoCheckVerify(ProcActionFuture future) { if (future.IsCanceled) return; var login = Context.GetModule<LoginModule>(QQModuleType.LOGIN); var account = Context.Account; login.CheckVerify(account.Username, (sender, Event) => { if (Event.Type == QQActionEventType.EvtOK) { var args = (CheckVerifyArgs)(Event.Target); Context.Account.Uin = args.Uin; if (args.Result == 0) { DoWebLogin(args.Code, future); } else { Context.Session.CapCd = args.Code; DoGetVerify("为了保证您账号的安全,请输入验证码中字符继续登录。", future); } } else if (Event.Type == QQActionEventType.EvtError) { future.NotifyActionEvent(QQActionEventType.EvtError, Event.Target); } }); }
private void DoCheckQRCode(ProcActionFuture future) { if (future.IsCanceled) return; var login = Context.GetModule<LoginModule>(QQModuleType.LOGIN); QQActionListener handler = null; handler = (sender, Event) => { if (Event.Type == QQActionEventType.EvtOK) { var eventArgs = (CheckQRCodeArgs)Event.Target; switch (eventArgs.Status) { case QRCodeStatus.QRCODE_OK: Context.FireNotify(new QQNotifyEvent(QQNotifyEventType.QrcodeSuccess)); DoCheckLoginSig(eventArgs.Msg, future); break; case QRCodeStatus.QRCODE_VALID: case QRCodeStatus.QRCODE_AUTH: Thread.Sleep(3000); login.CheckQRCode(handler); break; case QRCodeStatus.QRCODE_INVALID: Context.FireNotify(new QQNotifyEvent(QQNotifyEventType.QrcodeInvalid, eventArgs.Msg)); break; default: throw new ArgumentOutOfRangeException(); } } else if (Event.Type == QQActionEventType.EvtError) { future.NotifyActionEvent(QQActionEventType.EvtError, Event.Target); } }; login.CheckQRCode(handler); }
private void DoChannelLogin(ProcActionFuture future) { if (future.IsCanceled) return; var login = Context.GetModule<LoginModule>(QQModuleType.LOGIN); if (Context.Account.Status == QQStatus.OFFLINE) Context.Account.Status = QQStatus.ONLINE; login.ChannelLogin(Context.Account.Status, async (sender, Event) => { if (Event.Type == QQActionEventType.EvtOK) { future.NotifyActionEvent(QQActionEventType.EvtOK, null); Context.FireNotify(new QQNotifyEvent(QQNotifyEventType.LoginSuccess)); var task1 = Context.GetModule<GroupModule>(QQModuleType.GROUP).GetGroupList((s, e) => { if (e.Type == QQActionEventType.EvtOK) { Context.Logger.LogInformation($"获取群列表成功,共{Context.Store.GroupCount}个群"); } }).WhenFinalEvent(); var task2 = Context.GetModule<CategoryModule>(QQModuleType.CATEGORY).GetBuddyList((s, e) => { if (e.Type == QQActionEventType.EvtOK) { Context.Logger.LogInformation($"获取好友列表成功,共{Context.Store.BuddyCount}个好友"); } }).WhenFinalEvent(); var task3 = Context.GetModule<LoginModule>(QQModuleType.LOGIN).GetSelfInfo((s, e) => { if (e.Type == QQActionEventType.EvtOK) Context.Logger.LogInformation("获取个人信息成功"); }).WhenFinalEvent(); var task4 = Context.GetModule<BuddyModule>(QQModuleType.BUDDY).GetOnlineBuddy((s, e) => { if (e.Type == QQActionEventType.EvtOK) Context.Logger.LogInformation($"获取在线好友信息成功,共{Context.Store.GetOnlineBuddyList().Count()}个在线好友"); }).WhenFinalEvent(); await Task.WhenAll(task1, task2, task3, task4).ConfigureAwait(false); DoPollMsg(); } else if (Event.Type == QQActionEventType.EvtError) { future.NotifyActionEvent(QQActionEventType.EvtError, Event.Target); } }); }
public IQQActionFuture LoginWithQRCode(QQActionListener listener) { var future = new ProcActionFuture(listener, true); var login = Context.GetModule<LoginModule>(QQModuleType.LOGIN); login.GetQRCode((sender, @event) => { if (@event.Type == QQActionEventType.EvtOK) { var verify = (Image)@event.Target; Context.FireNotify(new QQNotifyEvent(QQNotifyEventType.QrcodeReady, verify)); DoCheckQRCode(future); // future.NotifyActionEvent(QQActionEventType.EvtOK, @event.Target); } else if (@event.Type == QQActionEventType.EvtError) { future.NotifyActionEvent(QQActionEventType.EvtError, @event.Target); } }); return future; }
private void DoChannelLogin(ProcActionFuture future) { var login = Context.GetModule<LoginModule>(QQModuleType.LOGIN); login.ChannelLogin(Context.Account.Status, (sender, Event) => { if (Event.Type == QQActionEventType.EVT_OK) { future.NotifyActionEvent(QQActionEventType.EVT_OK, null); } else if (Event.Type == QQActionEventType.EVT_ERROR) { future.NotifyActionEvent(QQActionEventType.EVT_ERROR, Event.Target); } }); }
private void DoCheckLoginSig(string checkSigUrl, ProcActionFuture future) { var login = Context.GetModule<LoginModule>(QQModuleType.LOGIN); login.CheckLoginSig(checkSigUrl, (sender, Event) => { if (Event.Type == QQActionEventType.EVT_OK) { DoChannelLogin(future); } else if (Event.Type == QQActionEventType.EVT_ERROR) { future.NotifyActionEvent(QQActionEventType.EVT_ERROR, Event.Target); } }); }
private void DoWebLogin(string verifyCode, ProcActionFuture future) { var login = Context.GetModule<LoginModule>(QQModuleType.LOGIN); login.WebLogin(Context.Account.Username, Context.Account.Password, Context.Account.Uin, verifyCode, ((sender, Event) => { if (Event.Type == QQActionEventType.EVT_OK) { DoCheckLoginSig((string)Event.Target, future); } else if (Event.Type == QQActionEventType.EVT_ERROR) { var ex = (QQException)(Event.Target); if (ex.ErrorCode == QQErrorCode.WRONG_CAPTCHA) { DoGetVerify(ex.Message, future); } else { future.NotifyActionEvent(QQActionEventType.EVT_ERROR, Event.Target); } } })); }