/** {@inheritDoc} */ public override void onHttpStatusOK(QQHttpResponse response) { JSONObject json = new JSONObject(response.getResponseString()); if (json.getInt("retcode") == 0) { json = json.getJSONObject("result"); // 消除所有成员状态,如果不在线的,webqq是不会返回的。 foreach (QQGroupMember member in group.getMembers()) { member.setStatus(QQStatus.OFFLINE); //member.setClientType(QQClientType.UNKNOWN); } //result/stats JSONArray stats = json.getJSONArray("stats"); for (int i = 0; i < stats.length(); i++) { // 下面重新设置最新状态 JSONObject stat = stats.getJSONObject(i); QQGroupMember member = group.getMemberByUin(stat.getLong("uin")); if (member != null) { //member.setClientType(QQClientType.valueOfRaw(stat.getInt("client_type"))); //member.setStatus(QQStatus.valueOfRaw(stat.getInt("stat"))); } } notifyActionEvent(QQActionEvent.Type.EVT_OK, group); } else { notifyActionEvent(QQActionEvent.Type.EVT_ERROR, QQWpfApplication1.action.QQException.QQErrorCode.UNEXPECTED_RESPONSE); } }
public override void onHttpStatusOK(QQHttpResponse response) { JSONObject json = new JSONObject(response.getResponseString()); if (json.getInt("retcode") == 0) { json = json.getJSONObject("result"); JSONObject ginfo = json.getJSONObject("ginfo"); group.setMemo(ginfo.getString("memo")); group.setLevel(ginfo.getInt("level")); group.setCreateTime(DateTime.FromBinary(ginfo.getInt("createtime"))); JSONArray members = ginfo.getJSONArray("members"); for (int i = 0; i < members.length(); i++) { JSONObject memjson = members.getJSONObject(i); QQGroupMember member = group.getMemberByUin(memjson.getLong("muin")); if (member == null) { member = new QQGroupMember(); group.getMembers().Add(member); } member.setUin(memjson.getLong("muin")); member.setGroup(group); //memjson.getLong("mflag"); //TODO ... } //result/minfo JSONArray minfos = json.getJSONArray("minfo"); for (int i = 0; i < minfos.length(); i++) { JSONObject minfo = minfos.getJSONObject(i); QQGroupMember member = group.getMemberByUin(minfo.getLong("uin")); member.setNickname(minfo.getString("nick")); member.setProvince(minfo.getString("province")); member.setCountry(minfo.getString("country")); member.setCity(minfo.getString("city")); member.setGender(minfo.getString("gender")); } //result/stats JSONArray stats = json.getJSONArray("stats"); for (int i = 0; i < stats.length(); i++) { // 下面重新设置最新状态 JSONObject stat = stats.getJSONObject(i); QQGroupMember member = group.getMemberByUin(stat.getLong("uin")); //member.setClientType(QQClientType.valueOfRaw(stat.getInt("client_type"))); //member.setStatus(QQStatus.valueOfRaw(stat.getInt("stat"))); } //results/cards if (json.has("cards")) { JSONArray cards = json.getJSONArray("cards"); for (int i = 0; i < cards.length(); i++) { JSONObject card = cards.getJSONObject(i); QQGroupMember member = group.getMemberByUin(card.getLong("muin")); if (card != null && card.has("card") && member != null) { member.setCard(card.getString("card")); } } } //results/vipinfo JSONArray vipinfos = json.getJSONArray("vipinfo"); for (int i = 0; i < vipinfos.length(); i++) { JSONObject vipinfo = vipinfos.getJSONObject(i); QQGroupMember member = group.getMemberByUin(vipinfo.getLong("u")); member.setVipLevel(vipinfo.getInt("vip_level")); member.setVip(vipinfo.getInt("is_vip") == 1); } notifyActionEvent(QQActionEvent.Type.EVT_OK, group); } else { notifyActionEvent(QQActionEvent.Type.EVT_ERROR, QQWpfApplication1.action.QQException.QQErrorCode.UNEXPECTED_RESPONSE); } }
/** * <p> * processSessionMsg. * </p> * * @param pollData * a {@link org.json.JSONObject} object. * @throws org.json.JSONException * if any. * @throws iqq.im.QQException * if any. * @return a {@link iqq.im.event.QQNotifyEvent} object. */ public QQNotifyEvent processSessionMsg(JSONObject pollData) { // {"retcode"in0,"result"in[{"poll_type"in"sess_message", // "value"in{"msg_id"in25144,"from_uin"in167017143,"to_uin"in1070772010,"msg_id2"in139233,"msg_type"in140,"reply_ip"in176752037,"time"in1365931836,"id"in2581801127,"ruin"in444674479,"service_type"in1, // "flags"in{"text"in1,"pic"in1,"file"in1,"audio"in1,"video"in1},"content"in[["font",{"size"in9,"color"in"000000","style"in[0,0,0],"name"in"Tahoma"}],"2\u8F7D3 ",["face",1]," "]}}]} QQStore store = getContext().getStore(); QQMsg msg = new QQMsg(); long fromUin = pollData.getLong("from_uin"); long fromQQ = pollData.getLong("ruin"); // 真实QQ int serviceType = pollData.getInt("service_type"); // Groupin0,Discussin1 long typeId = pollData.getLong("id"); // Group ID or Discuss ID msg.parseContentList(pollData.getJSONArray("content").ToString()); msg.setType(QQMsg.Type.SESSION_MSG); msg.setTo(getContext().getAccount()); msg.setDate(new DateTime(pollData.getLong("time") * 1000)); QQUser user = store.getBuddyByUin(fromUin); // 首先看看是不是自己的好友 if (user != null) { msg.setType(QQMsg.Type.BUDDY_MSG); // 是自己的好友 } else { if (serviceType == 0) // 是群成员 { QQGroup group = store.getGroupByCode(typeId); foreach (QQUser u in group.getMembers()) { if (u.getUin() == fromUin) { user = u; break; } } } else if (serviceType == 1) // 是讨论组成员 { QQDiscuz discuz = store.getDiscuzByDid(typeId); foreach (QQUser u in discuz.getMembers()) { if (u.getUin() == fromUin) { user = u; break; } } } else { user = store.getStrangerByUin(fromUin); // 看看陌生人列表中有木有 } if (user == null) // 还没有就新建一个陌生人,原理来说不应该这样。后面我就不知道怎么回复这消息了,但是消息是不能丢失的 { user = new QQStranger(); user.setQQ(pollData.getLong("ruin")); user.setUin(fromUin); user.setNickname(pollData.getLong("ruin") + ""); store.addStranger((QQStranger)user); } } user.setQQ(fromQQ); // 带上QQ号码 msg.setFrom(user); return(new QQNotifyEvent(QQNotifyEvent.Type.CHAT_MSG, msg)); }