Ejemplo n.º 1
0
        /**
         * <p>
         * processDiscuzMsg.
         * </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 processDiscuzMsg(JSONObject pollData)
        {
            QQStore store = getContext().getStore();

            QQMsg msg     = new QQMsg();
            long  fromUin = pollData.getLong("send_uin");
            long  did     = pollData.getLong("did");

            msg.parseContentList(pollData.getJSONArray("content").ToString());
            msg.setType(QQMsg.Type.DISCUZ_MSG);
            msg.setDiscuz(store.getDiscuzByDid(did));
            msg.setTo(getContext().getAccount());
            msg.setDate(new DateTime(pollData.getLong("time") * 1000));

            if (msg.getDiscuz() != null)
            {
                msg.setFrom(msg.getDiscuz().getMemberByUin(fromUin));
            }

            if (msg.getFrom() == null)
            {
                QQDiscuzMember member = new QQDiscuzMember();
                member.setUin(fromUin);
                msg.setFrom(member);
                if (msg.getDiscuz() != null)
                {
                    msg.getDiscuz().getMembers().Add(member);
                }
            }
            return(new QQNotifyEvent(QQNotifyEvent.Type.CHAT_MSG, msg));
        }
Ejemplo n.º 2
0
        public override QQHttpRequest OnBuildRequest()
        {
            QQSession     session = Context.Session;
            QQHttpRequest req     = CreateHttpRequest("GET",
                                                      QQConstants.URL_GET_SESSION_MSG_SIG);

            if (user is QQGroupMember)
            {
                QQGroupMember mb = user as QQGroupMember;
                mb.ServiceType = 0;
                req.AddGetValue("id", mb.Group.Gin + "");
                req.AddGetValue("service_type", "0"); // 0为群,1为讨论组
            }
            else if (user is QQDiscuzMember)
            {
                QQDiscuzMember mb = (QQDiscuzMember)user;
                mb.ServiceType = 1;
                req.AddGetValue("id", mb.Discuz.Did + "");
                req.AddGetValue("service_type", "1"); // 0为群,1为讨论组
            }
            else
            {
                // LOG.info("GetSessionMsgSigAction unknow type :" + user);
            }
            req.AddGetValue("to_uin", user.Uin + "");
            req.AddGetValue("clientid", session.ClientId + "");
            req.AddGetValue("psessionid", session.SessionId);
            req.AddGetValue("t", DateUtils.NowTimestamp() / 1000 + "");
            return(req);
        }
Ejemplo n.º 3
0
        /** {@inheritDoc} */
        public override QQHttpRequest onBuildRequest()
        {
            QQSession     session = getContext().getSession();
            QQHttpRequest req     = createHttpRequest("GET",
                                                      QQConstants.URL_GET_SESSION_MSG_SIG);

            if (user is QQGroupMember)
            {
                QQGroupMember mb = (QQGroupMember)user;
                mb.setServiceType(0);
                req.addGetValue("id", mb.getGroup().getGin() + "");
                req.addGetValue("service_type", "0");         // 0为群,1为讨论组
            }
            else if (user is QQDiscuzMember)
            {
                QQDiscuzMember mb = (QQDiscuzMember)user;
                mb.setServiceType(1);
                req.addGetValue("id", mb.getDiscuz().getDid() + "");
                req.addGetValue("service_type", "1");         // 0为群,1为讨论组
            }
            else
            {
            }
            req.addGetValue("to_uin", user.getUin() + "");
            req.addGetValue("clientid", session.getClientId() + "");
            req.addGetValue("psessionid", session.getSessionId());
            req.addGetValue("t", DateTime.Now.Ticks / 1000 + "");
            return(req);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 处理讨论组信息
        /// </summary>
        /// <param name="pollData"></param>
        /// <returns></returns>
        private QQNotifyEvent ProcessDiscuzMsg(JObject pollData)
        {
            try
            {
                var store = Context.Store;

                var msg     = new QQMsg();
                var fromUin = pollData["send_uin"].ToObject <long>();
                var did     = pollData["did"].ToObject <long>();

                msg.ParseContentList(JsonConvert.SerializeObject(pollData["content"]));
                msg.Type   = QQMsgType.DISCUZ_MSG;
                msg.Discuz = store.GetDiscuzByDid(did);
                msg.To     = Context.Account;
                var ticks = pollData["time"].ToObject <long>() * 1000;
                msg.Date = ticks > DateTime.MaxValue.Ticks ? DateTime.Now : new DateTime(ticks);

                if (msg.Discuz == null)
                {
                    var discuz = new QQDiscuz();
                    discuz.Did = did;
                    store.AddDiscuz(discuz);
                    msg.Discuz = store.GetDiscuzByDid(did);

                    var discuzModule = Context.GetModule <DiscuzModule>(QQModuleType.DISCUZ);
                    discuzModule.GetDiscuzInfo(discuz, null);
                }
                msg.From = msg.Discuz.GetMemberByUin(fromUin);

                if (msg.From == null)
                {
                    var member = new QQDiscuzMember {
                        Uin = fromUin
                    };
                    msg.From = member;
                    msg.Discuz.Members.Add(member);
                    // 获取用户信息
                    var userModule = Context.GetModule <UserModule>(QQModuleType.USER);
                    userModule.GetUserInfo(member, null);
                }
                return(new QQNotifyEvent(QQNotifyEventType.GroupMsg, msg));
            }
            catch (Exception ex)
            {
                return(new QQNotifyEvent(QQNotifyEventType.NetError, ex));
            }
        }
Ejemplo n.º 5
0
        public override void OnHttpStatusOK(QQHttpResponse response)
        {
            var json  = JObject.Parse(response.GetResponseString());
            var store = Context.Store;

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

                //result/info
                var info = result["info"].ToObject <JObject>();
                discuz.Name  = info["discu_name"].ToString();
                discuz.Owner = info["discu_owner"].ToObject <long>();

                //result/mem_list
                var memlist = result["mem_info"].ToObject <JArray>();
                foreach (var t in memlist)
                {
                    var memjson = t.ToObject <JObject>();
                    var member  = discuz.GetMemberByUin(memjson["uin"].ToObject <long>());
                    if (member == null)
                    {
                        member = new QQDiscuzMember();
                        discuz.AddMemeber(member);
                    }
                    member.Uin      = memjson["uin"].ToObject <long>();
                    member.QQ       = memjson["uin"].ToObject <long>(); //这里有用户真实的QQ号
                    member.Nickname = memjson["nick"].ToString();
                    member.Discuz   = discuz;
                }

                // 消除所有成员状态,如果不在线的,webqq是不会返回的。
                discuz.ClearStatus();
                //result/mem_status
                var statlist = result["mem_status"].ToObject <JArray>();
                foreach (var t in statlist)
                {
                    // 下面重新设置最新状态
                    var    statjson = t.ToObject <JObject>();
                    QQUser member   = discuz.GetMemberByUin(statjson["uin"].ToObject <long>());
                    if (statjson["client_type"] != null && member != null)
                    {
                        member.ClientType = QQClientTypeInfo.ValueOfRaw(statjson["client_type"].ToObject <int>());
                        member.Status     = QQStatus.ValueOfRaw(statjson["status"].ToString());
                    }
                }

                //result/mem_info
                var infolist = result["mem_info"].ToObject <JArray>();
                foreach (var t in infolist)
                {
                    var    infojson = t.ToObject <JObject>();
                    QQUser member   = discuz.GetMemberByUin(infojson["uin"].ToObject <long>());
                    member.Nickname = infojson["nick"].ToString();
                }

                NotifyActionEvent(QQActionEventType.EvtOK, store.GetDiscuzList());
            }
            else
            {
                NotifyActionEvent(QQActionEventType.EvtError, new QQException(QQErrorCode.UnexpectedResponse));
            }
        }