/** {@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);
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
        /**
         * <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));
        }