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); } }
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; } }
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); } }
/// <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\":\"(.*?)\""); }
/// <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); }
/// <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)); }
/** * <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); }
/// <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)); }
/** * {@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); }
/** * {@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)); }
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); }
/** * <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); }
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); }
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()); }
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); } }
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); } }
public IEnumerable <QQBuddy> GetOnlineBuddyList() { return(from buddy in _buddyMap where QQStatus.IsGeneralOnline(buddy.Value.Status) select buddy.Value); }
/// <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)); }
public ChangeStatusPacket(QQClient client,QQStatus status, bool showFakeCam) : base(QQCommand.Change_Status, true, client) { this.ShowFakeCam = showFakeCam; this.Status = status; }
/// <summary> /// 改变QQ状态为当前QQ状态,默认摄像头等 /// </summary> public void ChangeStatus(QQStatus status) { ChangeStatus(status, QQClient.QQUser.IsShowFakeCam); }
public List <QQBuddy> GetOnlineBuddyList() { return((from buddy in _buddyMap where QQStatus.IsGeneralOnline(buddy.Value.Status) select buddy.Value).ToList()); }
public QQActionFuture ChannelLogin(QQStatus status, QQActionEventHandler listener) { return(PushHttpAction(new ChannelLoginAction(Context, listener, status))); }
public AbstractActionFuture channelLogin(QQStatus status, QQActionListener.OnActionEvent listener) { return(pushHttpAction(new ChannelLoginAction(getContext(), listener, status))); }
private BitmapImage face; // 头像,不能被序列化 /** * <p>Constructor for QQUser.</p> */ public QQUser() { status = QQStatus.OFFLINE; level = new QQLevel(); }
/** * <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; }
public ChangeStatusPacket(QQClient client, QQStatus status, bool showFakeCam) : base(QQCommand.Change_Status, true, client) { this.ShowFakeCam = showFakeCam; this.Status = status; }
//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; }
/** * {@inheritDoc} * * 改变状态 */ public AbstractActionFuture changeStatus(QQStatus status, QQActionListener.OnActionEvent listener) { UserModule userModule = (UserModule)getModule(AbstractModule.Type.USER); return(userModule.changeStatus(status, listener)); }
/** * <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; }
/// <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); }
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); } }