Пример #1
0
        public override void OnHttpStatusOK(QQHttpResponse response)
        {
            //{"retcode":0,"result":{"uin":236557647,"cip":1991953329,"index":1075,"port":51494,"status":"online","vfwebqq":"41778677efd86bae2ed575eea02349046a36f3f53298a34b97d75297ec1e67f6ee5226429daa6aa7","psessionid":"8368046764001d636f6e6e7365727665725f77656271714031302e3133332e342e31373200005b9200000549016e04004f95190e6d0000000a4052347371696a62724f6d0000002841778677efd86bae2ed575eea02349046a36f3f53298a34b97d75297ec1e67f6ee5226429daa6aa7","user_state":0,"f":0}}

            var str     = response.GetResponseString();
            var json    = JObject.Parse(str);
            var session = Context.Session;
            var account = Context.Account;
            var retcode = json["retcode"].ToString();

            if (retcode == "0")
            {
                var ret = json["result"].ToObject <JObject>();
                account.Uin       = ret["uin"].ToObject <long>();
                account.QQ        = ret["uin"].ToObject <long>();
                session.SessionId = ret["psessionid"].ToString();
                // session.Vfwebqq = ret["vfwebqq"].ToString();
                account.Status = QQStatus.ValueOfRaw(ret["status"].ToString());
                session.State  = QQSessionState.Online;
                session.Index  = ret["index"].ToObject <int>();
                session.Port   = ret["port"].ToObject <int>();
                NotifyActionEvent(QQActionEventType.EvtOK, null);
            }
            else
            {
                //var msg = $"errmsg: {json["errmsg"] ?? ""}, retcode: {retcode}";
                //NotifyActionEvent(QQActionEventType.EVT_ERROR, new QQException(QQErrorCode.INVALID_RESPONSE, msg));	//TODO ..
                throw new QQException(QQErrorCode.UnexpectedResponse, str);
            }
        }
Пример #2
0
        public void SetFriendStatus(int qq, QQStatus status)
        {
            if (!this.ContainsKey(qq))
            {
                QQFriend friend = new QQFriend();
                friend.QQBasicInfo.QQ      = qq;
                friend.QQBasicInfo.GroupId = -1;//应该是陌生人
                this.Add(qq, friend);
            }

            if (this[qq].FriendStatus.Status != QQStatus.OFFLINE && status == QQStatus.OFFLINE)
            {
                this.Onlines--;
            }
            else if (this[qq].FriendStatus.Status == QQStatus.OFFLINE && status != QQStatus.OFFLINE)
            {
                this.Onlines++;
            }
            if (this[qq].FriendStatus != null)
            {
                this[qq].FriendStatus.Status = status;
            }
            else
            {
                this[qq].FriendStatus        = new FriendStatus();
                this[qq].FriendStatus.Status = status;
            }
        }
Пример #3
0
        public override void OnHttpStatusOK(QQHttpResponse response)
        {
            var str   = response.ResponseString;
            var json  = JObject.Parse(str);
            var store = Context.Store;

            if (json["retcode"].ToString() == "0")
            {
                var result = json["result"].ToObject <JArray>();
                foreach (var token in result)
                {
                    var obj        = token.ToObject <JObject>();
                    var uin        = obj["uin"].ToObject <long>();
                    var status     = obj["status"].ToString();
                    var clientType = obj["client_type"].ToObject <int>();
                    var buddy      = store.GetBuddyByUinOrAdd(uin);
                    buddy.Status     = QQStatus.ValueOfRaw(status);
                    buddy.ClientType = QQClientTypeInfo.ValueOfRaw(clientType);
                }
                NotifyActionEvent(QQActionEventType.EvtOK, null);
            }
            else
            {
                throw new QQException(QQErrorCode.InvalidResponse, str);
            }
        }
Пример #4
0
 /// <summary>
 /// 处理好友状态变化
 /// </summary>
 /// <param name="pollData"></param>
 /// <returns></returns>
 private QQNotifyEvent ProcessBuddyStatusChange(JObject pollData)
 {
     try
     {
         var uin   = pollData["uin"].ToObject <long>();
         var buddy = Context.Store.GetBuddyByUin(uin);
         if (buddy == null)
         {
             buddy = new QQBuddy()
             {
                 Uin = uin
             };
             Context.Store.AddBuddy(buddy);
             var userModule = Context.GetModule <UserModule>(QQModuleType.USER);
             userModule.GetUserInfo(buddy, null);
         }
         var status     = pollData["status"].ToString();
         var clientType = pollData["client_type"].ToObject <int>();
         buddy.Status     = QQStatus.ValueOfRaw(status);
         buddy.ClientType = QQClientTypeInfo.ValueOfRaw(clientType);
         return(new QQNotifyEvent(QQNotifyEventType.BuddyStatusChange, buddy));
     }
     catch (Exception ex)
     {
         return(new QQNotifyEvent(QQNotifyEventType.NetError, ex));
     }
 }
 /// <summary>
 /// 初始化QQ
 /// </summary>
 /// <param name="qq">QQ帐号</param>
 /// <param name="pass">QQ密码</param>
 /// <param name="qs">QQ状态</param>
 public WebQQ(string qq, string pass, QQStatus qs = QQStatus.online)
 {
     user.QQID     = qq;
     user.QQPass   = pass;
     user.State    = qs;
     user.ClientID = GetClientID();//取客户端ID
 }
        /// <summary>
        /// 掉线重登
        /// </summary>
        public void Login2(QQStatus qs)
        {
            string html = qwin.POSTHtmlByWininetUTF8("http://d.web2.qq.com/channel/login2", "r=%7B%22status%22%3A%22" + qs.ToString() + "%22%2C%22ptwebqq%22%3A%22" + user.Ptwebqq + "%22%2C%22passwd_sig%22%3A%22%22%2C%22clientid%22%3A%22" + user.ClientID + "%22%2C%22psessionid%22%3A%22" + user.Psessionid + "%22%7D&clientid=" + user.ClientID + "&psessionid=" + user.Psessionid);

            //取得下面2个令牌
            user.Vfwebqq    = Tools.RegexHelp(html, "vfwebqq\":\"(.*?)\"");
            user.Psessionid = Tools.RegexHelp(html, "psessionid\":\"(.*?)\"");
        }
Пример #7
0
        /// <summary>改变自身状态
        ///     <remark>abu 2008-03-12 </remark>
        /// </summary>
        /// <param name="status">The status.</param>
        /// <param name="showFakeCam">if set to <c>true</c> [show fake cam].</param>
        public void ChangeStatus(QQStatus status, bool showFakeCam)
        {
            QQUser.Status = status;
            ChangeStatusPacket packet = new ChangeStatusPacket(QQUser);

            packet.ShowFakeCam = showFakeCam;
            QQClient.PacketManager.SendPacket(packet, QQPort.Main.Name);
        }
Пример #8
0
        /// <summary>
        /// 重新登录
        /// </summary>
        /// <param name="status"></param>
        /// <param name="listener"></param>
        /// <returns></returns>
        public QQActionFuture Relogin(QQStatus status, QQActionEventHandler listener)
        {
            if (Session.State == QQSessionState.ONLINE)
            {
                throw new Exception("client is aready online !!!");
            }

            Account.Status = status;
            Session.State  = QQSessionState.LOGINING;
            var procModule = GetModule <ProcModule>(QQModuleType.PROC);

            return(procModule.Relogin(status, listener));
        }
Пример #9
0
        /**
         * <p>getOnlineCount.</p>
         *
         * @return a int.
         */
        public int getOnlineCount()
        {
            int count = 0;

            foreach (QQBuddy buddy in buddyList)
            {
                QQStatus stat = buddy.getStatus();
                //if(QQStatus.isGeneralOnline(stat)){
                //    count++;
                //}
            }
            return(count);
        }
Пример #10
0
        /// <summary>
        /// 重新登录
        /// </summary>
        /// <param name="status"></param>
        /// <param name="listener"></param>
        /// <returns></returns>
        public IQQActionFuture Relogin(QQStatus status, QQActionListener listener)
        {
            if (Session.State == QQSessionState.Online)
            {
                //throw new Exception("client is aready online !!!");
                return(null);
            }
            Account.Status = status;
            Session.State  = QQSessionState.Logining;
            var procModule = GetModule <ProcModule>(QQModuleType.PROC);

            return(procModule.Relogin(status, listener));
        }
Пример #11
0
        /**
         * {@inheritDoc}
         *
         * 重新登录
         */
        public void relogin(QQStatus status, QQActionListener.OnActionEvent listener)
        {
            if (session.getState() == QQWpfApplication1.action.QQSession.State.ONLINE)
            {
                throw new ApplicationException("client is aready online !!!");
            }

            getAccount().setStatus(status);
            getSession().setState(QQSession.State.LOGINING);
            ProcModule procModule = (ProcModule)getModule(AbstractModule.Type.PROC);

            procModule.relogin(status, listener);
        }
Пример #12
0
        /**
         * {@inheritDoc}
         *
         * 登录接口
         */
        public AbstractActionFuture login(QQStatus status, QQActionListener.OnActionEvent listener)
        {
            //检查客户端状态,是否允许登陆
            if (session.getState() == QQWpfApplication1.action.QQSession.State.ONLINE)
            {
                throw new ApplicationException("client is aready online !!!");
            }

            getAccount().setStatus(status);
            session.setState(QQSession.State.LOGINING);
            ProcModule procModule = (ProcModule)getModule(AbstractModule.Type.PROC);

            return(procModule.login(listener));
        }
Пример #13
0
        public IQQActionFuture Relogin(QQStatus status, QQActionListener listener)
        {
            Context.Account.Status = status;
            Context.Session.State  = QQSessionState.Logining;
            var login  = Context.GetModule <LoginModule>(QQModuleType.LOGIN);
            var future = login.ChannelLogin(status, (sender, Event) =>
            {
                if (Event.Type == QQActionEventType.EvtError)
                {
                    Context.Logger.LogInformation("iqq client ReloginChannel fail!!! use Login.");
                    Login(listener);
                }
                else
                {
                    listener(this, Event);
                }
            });

            return(future);
        }
Пример #14
0
        /**
         * <p>relogin.</p>
         *
         * @param status a {@link iqq.im.bean.QQStatus} object.
         * @param listener a {@link iqq.im.QQActionListener.OnActionEvent} object.
         * @return a {@link iqq.im.evt.AbstractActionFuture} object.
         */
        public AbstractActionFuture relogin(QQStatus status, QQActionListener.OnActionEvent listener)
        {
            getContext().getAccount().setStatus(status);
            getContext().getSession().setState(QQSession.State.LOGINING);

            AbstractActionFuture future      = new AbstractActionFuture(listener);
            LoginModule          loginModule = (LoginModule)getContext().getModule(AbstractModule.Type.LOGIN);

            loginModule.channelLogin(status, delegate(QQActionEvent evt)
            {
                if (evt.getType() == QQActionEvent.Type.EVT_ERROR)
                {
                    login(listener);
                }
                else
                {
                    listener(evt);
                }
            });
            return(future);
        }
Пример #15
0
        public QQActionFuture Relogin(QQStatus status, QQActionEventHandler listener)
        {
            Context.Account.Status = status;
            Context.Session.State  = QQSessionState.LOGINING;
            var login = Context.GetModule <LoginModule>(QQModuleType.LOGIN);

            MyLogger.Default.Info("iqq client Relogin...");
            var future = login.ChannelLogin(status, (sender, Event) =>
            {
                if (Event.Type == QQActionEventType.EVT_ERROR)
                {
                    MyLogger.Default.Info("iqq client ReloginChannel fail!!! use Relogin.");
                    Login(listener);
                }
                else
                {
                    listener(this, Event);
                }
            });

            return(future);
        }
Пример #16
0
        public override void OnHttpStatusOK(QQHttpResponse response)
        {
            JObject json  = JObject.Parse(response.GetResponseString());
            QQStore store = Context.Store;

            if (json["retcode"].ToString() == "0")
            {
                JArray result = json["result"].ToObject <JArray>();
                for (int i = 0; i < result.Count; i++)
                {
                    JObject obj        = result[i].ToObject <JObject>();
                    long    uin        = obj["uin"].ToObject <long>();
                    string  status     = obj["status"].ToString();
                    int     clientType = obj["client_type"].ToObject <int>();

                    QQBuddy buddy = store.GetBuddyByUin(uin);
                    buddy.Status     = QQStatus.ValueOfRaw(status);
                    buddy.ClientType = QQClientType.ValueOfRaw(clientType);
                }
            }

            NotifyActionEvent(QQActionEventType.EVT_OK, store.GetOnlineBuddyList());
        }
Пример #17
0
        public override void OnHttpStatusOK(QQHttpResponse response)
        {
            JObject json = JObject.Parse(response.GetResponseString());

            if (json["retcode"].ToString() == "0")
            {
                json = json["result"].ToObject <JObject>();

                // 消除所有成员状态,如果不在线的,webqq是不会返回的。
                foreach (QQGroupMember member in group.Members)
                {
                    member.Status     = QQStatus.OFFLINE;
                    member.ClientType = QQClientType.Unknown;
                }

                //result/stats
                JArray stats = json["stats"].ToObject <JArray>();
                for (int i = 0; i < stats.Count; i++)
                {
                    // 下面重新设置最新状态
                    JObject       stat   = stats[i].ToObject <JObject>();
                    QQGroupMember member = group.GetMemberByUin(stat["uin"].ToObject <long>());
                    if (member != null)
                    {
                        member.ClientType = QQClientType.ValueOfRaw(stat["client_type"].ToObject <int>());
                        member.Status     = QQStatus.ValueOfRaw(stat["stat"].ToObject <int>());
                    }
                }

                NotifyActionEvent(QQActionEventType.EVT_OK, group);
            }
            else
            {
                NotifyActionEvent(QQActionEventType.EVT_ERROR, QQErrorCode.UNEXPECTED_RESPONSE);
            }
        }
Пример #18
0
        public override void OnHttpStatusOK(QQHttpResponse response)
        {
            var json = JObject.Parse(response.GetResponseString());

            if (json["retcode"].ToString() == "0")
            {
                json = json["result"].ToObject <JObject>();

                // 消除所有成员状态,如果不在线的,webqq是不会返回的。
                foreach (var member in _group.Members)
                {
                    member.Status     = QQStatus.OFFLINE;
                    member.ClientType = QQClientType.Unknown;
                }

                //result/stats
                var stats = json["stats"].ToObject <JArray>();
                for (var i = 0; i < stats.Count; i++)
                {
                    // 下面重新设置最新状态
                    var stat   = stats[i].ToObject <JObject>();
                    var member = _group.GetMemberByUin(stat["uin"].ToObject <long>());
                    if (member != null)
                    {
                        member.ClientType = QQClientTypeInfo.ValueOfRaw(stat["client_type"].ToObject <int>());
                        member.Status     = QQStatus.ValueOfRaw(stat["stat"].ToObject <int>());
                    }
                }

                NotifyActionEvent(QQActionEventType.EvtOK, _group);
            }
            else
            {
                NotifyActionEvent(QQActionEventType.EvtError, QQErrorCode.UnexpectedResponse);
            }
        }
Пример #19
0
 public IEnumerable <QQBuddy> GetOnlineBuddyList()
 {
     return(from buddy in _buddyMap where QQStatus.IsGeneralOnline(buddy.Value.Status) select buddy.Value);
 }
Пример #20
0
        /// <summary>
        /// 改变状态
        /// </summary>
        /// <param name="status"></param>
        /// <param name="listener"></param>
        /// <returns></returns>
        public IQQActionFuture ChangeStatus(QQStatus status, QQActionListener listener)
        {
            var userModule = GetModule <UserModule>(QQModuleType.USER);

            return(userModule.ChangeStatus(status, listener));
        }
Пример #21
0
 public ChangeStatusPacket(QQClient client,QQStatus status, bool showFakeCam)
     : base(QQCommand.Change_Status, true, client)
 {
     this.ShowFakeCam = showFakeCam;
     this.Status = status;
 }
Пример #22
0
 /// <summary>
 /// 改变QQ状态为当前QQ状态,默认摄像头等
 /// </summary>
 public void ChangeStatus(QQStatus status)
 {
     ChangeStatus(status, QQClient.QQUser.IsShowFakeCam);
 }
Пример #23
0
 public List <QQBuddy> GetOnlineBuddyList()
 {
     return((from buddy in _buddyMap where QQStatus.IsGeneralOnline(buddy.Value.Status) select buddy.Value).ToList());
 }
Пример #24
0
 public QQActionFuture ChannelLogin(QQStatus status, QQActionEventHandler listener)
 {
     return(PushHttpAction(new ChannelLoginAction(Context, listener, status)));
 }
Пример #25
0
 public AbstractActionFuture channelLogin(QQStatus status, QQActionListener.OnActionEvent listener)
 {
     return(pushHttpAction(new ChannelLoginAction(getContext(), listener, status)));
 }
Пример #26
0
        private BitmapImage face;  // 头像,不能被序列化


        /**
         * <p>Constructor for QQUser.</p>
         */
        public QQUser()
        {
            status = QQStatus.OFFLINE;
            level  = new QQLevel();
        }
Пример #27
0
 /**
  * <p>Setter for the field <code>status</code>.</p>
  *
  * @param status a {@link iqq.im.bean.QQStatus} object.
  */
 public void setStatus(QQStatus status)
 {
     this.status = status;
 }
Пример #28
0
 public ChangeStatusPacket(QQClient client, QQStatus status, bool showFakeCam)
     : base(QQCommand.Change_Status, true, client)
 {
     this.ShowFakeCam = showFakeCam;
     this.Status      = status;
 }
Пример #29
0
 //public ChangeStatusPacket(QQClient client)
 //    : base(QQCommand.Change_Status, true, client)
 //{
 //    ShowFakeCam = client.QQUser.IsShowFakeCam;
 //    Status = client.PrivateManager.
 //}
 /// <summary>
 /// QQ状态等于当前QQ状态
 /// </summary>
 /// <param name="client"></param>
 /// <param name="showFakeCam"></param>
 public ChangeStatusPacket(QQClient client, QQStatus status)
     : base(QQCommand.Change_Status, true, client)
 {
     this.ShowFakeCam = client.QQUser.IsShowFakeCam;
     this.Status      = status;
 }
Пример #30
0
        /**
         * {@inheritDoc}
         *
         * 改变状态
         */

        public AbstractActionFuture changeStatus(QQStatus status, QQActionListener.OnActionEvent listener)
        {
            UserModule userModule = (UserModule)getModule(AbstractModule.Type.USER);

            return(userModule.changeStatus(status, listener));
        }
Пример #31
0
 /**
  * <p>Constructor for ChangeStatusAction.</p>
  *
  * @param context a {@link iqq.im.core.QQContext} object.
  * @param listener a {@link iqq.im.QQActionListener} object.
  * @param status a {@link iqq.im.bean.QQStatus} object.
  */
 public ChangeStatusAction(QQContext context, QQActionListener.OnActionEvent listener,
                           QQStatus status) : base(context, listener)
 {
     this.status = status;
 }
Пример #32
0
 /// <summary>
 /// 改变QQ状态
 /// </summary>
 /// <param name="status">状态</param>
 /// <param name="showFakeCam">是否有摄像头</param>
 public void ChangeStatus(QQStatus status, bool showFakeCam)
 {
     OutPacket outPacket = new ChangeStatusPacket(QQClient,status, showFakeCam);
     QQClient.PacketManager.SendPacket(outPacket);
 }
Пример #33
0
        public override void OnHttpStatusOK(QQHttpResponse response)
        {
            JObject json = JObject.Parse(response.GetResponseString());

            if (json["retcode"].ToString() == "0")
            {
                json = json["result"].ToObject <JObject>();
                JObject ginfo = json["ginfo"].ToObject <JObject>();
                group.Memo       = ginfo["memo"].ToString();
                group.Level      = ginfo["level"].ToObject <int>();
                group.CreateTime = new DateTime(ginfo["createtime"].ToObject <int>());

                JArray members = ginfo["members"].ToObject <JArray>();
                for (int i = 0; i < members.Count; i++)
                {
                    JObject       memjson = members[i].ToObject <JObject>();
                    QQGroupMember member  = group.GetMemberByUin(memjson["muin"].ToObject <long>());
                    if (member == null)
                    {
                        member = new QQGroupMember();
                        group.Members.Add(member);
                    }
                    member.Uin   = memjson["muin"].ToObject <long>();
                    member.Group = group;
                    //memjson["mflag"]; //TODO ...
                }

                //result/minfo
                JArray minfos = json["minfo"].ToObject <JArray>();
                for (int i = 0; i < minfos.Count; i++)
                {
                    JObject       minfo  = minfos[i].ToObject <JObject>();
                    QQGroupMember member = group.GetMemberByUin(minfo["uin"].ToObject <int>());
                    member.Nickname = minfo["nick"].ToString();
                    member.Province = minfo["province"].ToString();
                    member.Country  = minfo["country"].ToString();
                    member.City     = minfo["city"].ToString();
                    member.Gender   = minfo["gender"].ToString();
                }

                //result/stats
                JArray stats = json["stats"].ToObject <JArray>();
                for (int i = 0; i < stats.Count; i++)
                {
                    // 下面重新设置最新状态
                    JObject       stat   = stats[i].ToObject <JObject>();
                    QQGroupMember member = group.GetMemberByUin(stat["uin"].ToObject <long>());
                    member.ClientType = QQClientType.ValueOfRaw(stat["client_type"].ToObject <int>());
                    member.Status     = QQStatus.ValueOfRaw(stat["stat"].ToObject <int>());
                }

                //results/cards
                if (json["cards"] != null)
                {
                    JArray cards = json["cards"].ToObject <JArray>();
                    for (int i = 0; i < cards.Count; i++)
                    {
                        JObject       card   = cards[i].ToObject <JObject>();
                        QQGroupMember member = group.GetMemberByUin(card["muin"].ToObject <long>());
                        if (card["card"] != null && member != null)
                        {
                            member.Card = card["card"].ToString();
                        }
                    }
                }

                //results/vipinfo
                JArray vipinfos = json["vipinfo"].ToObject <JArray>();
                for (int i = 0; i < vipinfos.Count; i++)
                {
                    JObject       vipinfo = vipinfos[i].ToObject <JObject>();
                    QQGroupMember member  = group.GetMemberByUin(vipinfo["u"].ToObject <long>());
                    member.VipLevel = vipinfo["vip_level"].ToObject <int>();
                    member.IsVip    = (vipinfo["is_vip"].ToString() != "0");
                }

                NotifyActionEvent(QQActionEventType.EVT_OK, group);
            }
            else
            {
                NotifyActionEvent(QQActionEventType.EVT_ERROR, QQErrorCode.UNEXPECTED_RESPONSE);
            }
        }
Пример #34
0
 //public ChangeStatusPacket(QQClient client)
 //    : base(QQCommand.Change_Status, true, client)
 //{
 //    ShowFakeCam = client.QQUser.IsShowFakeCam;
 //    Status = client.PrivateManager.
 //}
 /// <summary>
 /// QQ状态等于当前QQ状态
 /// </summary>
 /// <param name="client"></param>
 /// <param name="showFakeCam"></param>
 public ChangeStatusPacket(QQClient client, QQStatus status)
     : base(QQCommand.Change_Status, true, client)
 {
     this.ShowFakeCam = client.QQUser.IsShowFakeCam;
     this.Status = status;
 }