Пример #1
0
        public override void OnHttpStatusOK(QQHttpResponse response)
        {
            //{"retcode":0,"result":{"dnamelist":[{"did":3536443553,"name":"\u8FD9\u662F\u6807\u9898"},
            //{"did":625885728,"name":""}],"dmasklist":[{"did":1000,"mask":0}]}}

            JObject json  = JObject.Parse(response.GetResponseString());
            QQStore store = Context.Store;

            if (json["retcode"].ToString() == "0")
            {
                JObject result  = json["result"].ToObject <JObject>();
                JArray  dizlist = result["dnamelist"].ToObject <JArray>();
                for (int i = 0; i < dizlist.Count; i++)
                {
                    QQDiscuz discuz  = new QQDiscuz();
                    JObject  dizjson = dizlist[i].ToObject <JObject>();
                    discuz.Did  = dizjson["did"].ToObject <long>();
                    discuz.Name = dizjson["name"].ToString();
                    store.AddDiscuz(discuz);
                }
                NotifyActionEvent(QQActionEventType.EVT_OK, store.GetDiscuzList());
            }
            else
            {
                NotifyActionEvent(QQActionEventType.EVT_ERROR, new QQException(QQErrorCode.UNEXPECTED_RESPONSE));
            }
        }
Пример #2
0
        public override void OnHttpStatusOK(QQHttpResponse response)
        {
            JObject       json    = JObject.Parse(response.GetResponseString());
            List <object> recents = new List <object>();
            QQStore       store   = Context.Store;

            if (json["retcode"].ToString() == "0")
            {
                JArray result = json["result"].ToObject <JArray>();
                for (int i = 0; i < result.Count; i++)
                {
                    JObject rejson = result[i].ToObject <JObject>();
                    switch (rejson["type"].ToObject <int>())
                    {
                    case 0:
                    {           //好友
                        QQBuddy buddy = store.GetBuddyByUin(rejson["uin"].ToObject <long>());
                        if (buddy != null)
                        {
                            recents.Add(buddy);
                        }
                        break;
                    }

                    case 1:
                    {           //群
                        QQGroup group = store.GetGroupByCode(rejson["uin"].ToObject <long>());
                        if (group != null)
                        {
                            recents.Add(group);
                        }
                        break;
                    }

                    case 2:
                    {           //讨论组
                        QQDiscuz discuz = store.GetDiscuzByDid(rejson["uin"].ToObject <long>());
                        if (discuz != null)
                        {
                            recents.Add(discuz);
                        }
                        break;
                    }
                    }
                }
                NotifyActionEvent(QQActionEventType.EVT_OK, recents);
            }
            else
            {
                NotifyActionEvent(QQActionEventType.EVT_ERROR, new QQException(QQErrorCode.UNEXPECTED_RESPONSE));
            }
        }
Пример #3
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));
            }
        }
Пример #4
0
        public override void onHttpStatusOK(QQHttpResponse response)
        {
            JSONObject    json    = new JSONObject(response.getResponseString());
            List <Object> recents = new List <Object>();
            QQStore       store   = getContext().getStore();

            if (json.getInt("retcode") == 0)
            {
                JSONArray result = json.getJSONArray("result");
                for (int i = 0; i < result.length(); i++)
                {
                    JSONObject rejson = result.getJSONObject(i);
                    switch (rejson.getInt("type"))
                    {
                    case 0: {   //好友
                        QQBuddy buddy = store.getBuddyByUin(rejson.getLong("uin"));
                        if (buddy != null)
                        {
                            recents.Add(buddy);
                        }
                    } break;

                    case 1: {   //群
                        QQGroup group = store.getGroupByCode(rejson.getLong("uin"));
                        if (group != null)
                        {
                            recents.Add(group);
                        }
                    } break;

                    case 2: {   //讨论组
                        QQDiscuz discuz = store.getDiscuzByDid(rejson.getLong("uin"));
                        if (discuz != null)
                        {
                            recents.Add(discuz);
                        }
                        break;
                    }
                    }
                }
                notifyActionEvent(QQActionEvent.Type.EVT_OK, recents);
            }
            else
            {
                notifyActionEvent(QQActionEvent.Type.EVT_ERROR, new QQException(QQWpfApplication1.action.QQException.QQErrorCode.UNEXPECTED_RESPONSE));
            }
        }
Пример #5
0
 public void DeleteDiscuz(QQDiscuz discuz)
 {
     _discuzMap.TryRemove(discuz.Did, out discuz);
 }
Пример #6
0
 public void AddDiscuz(QQDiscuz discuz)
 {
     _discuzMap[discuz.Did] = discuz;
 }
Пример #7
0
        /// <summary>
        /// 获取讨论组信息
        /// </summary>
        /// <param name="discuz"></param>
        /// <param name="listener"></param>
        /// <returns></returns>
        public IQQActionFuture GetDiscuzInfo(QQDiscuz discuz, QQActionListener listener)
        {
            var mod = GetModule <DiscuzModule>(QQModuleType.DISCUZ);

            return(mod.GetDiscuzInfo(discuz, listener));
        }
Пример #8
0
 public IQQActionFuture GetDiscuzInfo(QQDiscuz discuz, QQActionListener listener)
 {
     return(PushHttpAction(new GetDiscuzInfoAction(this.Context, listener, discuz)));
 }
Пример #9
0
 public void DeleteDiscuz(QQDiscuz discuz)
 {
     _discuzMap.Remove(discuz.Did);
 }
Пример #10
0
 public void AddDiscuz(QQDiscuz discuz)
 {
     _discuzMap.Add(discuz.Did, discuz, AddChoice.Update);
 }
Пример #11
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));
        }
Пример #12
0
 public GetDiscuzInfoAction(IQQContext context, QQActionListener listener, QQDiscuz discuz)
     : base(context, listener)
 {
     this.discuz = discuz;
 }
Пример #13
0
        /// <summary>
        /// 处理临时会话消息
        /// </summary>
        /// <param name="pollData"></param>
        /// <returns></returns>
        private QQNotifyEvent ProcessSessionMsg(JObject pollData)
        {
            // {"retcode":0,"result":[{"poll_type":"sess_message",
            // "value":{"msg_id":25144,"from_uin":167017143,"to_uin":1070772010,"msg_id2":139233,"msg_type":140,"reply_ip":176752037,"time":1365931836,"id":2581801127,"ruin":444674479,"service_type":1,
            // "flags":{"text":1,"pic":1,"file":1,"audio":1,"video":1},"content":[["font",{"size":9,"color":"000000","style":[0,0,0],"name":"Tahoma"}],"2\u8F7D3 ",["face",1]," "]}}]}
            try
            {
                var store       = Context.Store;
                var msg         = new QQMsg();
                var fromUin     = pollData["from_uin"].ToObject <long>();
                var fromQQ      = pollData["ruin"].ToObject <long>();        // 真实QQ
                var serviceType = pollData["service_type"].ToObject <int>(); // Group:0,Discuss:1
                var typeId      = pollData["id"].ToObject <long>();          // Group ID or Discuss ID

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

                QQUser user = store.GetBuddyByUin(fromUin); // 首先看看是不是自己的好友
                if (user != null)
                {
                    msg.Type = QQMsgType.BUDDY_MSG; // 是自己的好友
                }
                else
                {
                    if (serviceType == 0)
                    { // 是群成员
                        var group = store.GetGroupByCode(typeId);
                        if (group == null)
                        {
                            group      = new QQGroup();
                            group.Code = typeId;
                            // 获取群信息
                            var groupModule = Context.GetModule <GroupModule>(QQModuleType.GROUP);
                            groupModule.GetGroupInfo(group, null);
                        }
                        foreach (var u in group.Members)
                        {
                            if (u.Uin == fromUin)
                            {
                                user = u;
                                break;
                            }
                        }
                    }
                    else if (serviceType == 1)
                    { // 是讨论组成员
                        var discuz = store.GetDiscuzByDid(typeId);
                        if (discuz == null)
                        {
                            discuz = new QQDiscuz {
                                Did = typeId
                            };

                            // 获取讨论组信息
                            var discuzModule = Context.GetModule <DiscuzModule>(QQModuleType.DISCUZ);
                            discuzModule.GetDiscuzInfo(discuz, null);
                        }

                        foreach (var u in discuz.Members)
                        {
                            if (u.Uin == fromUin)
                            {
                                user = u;
                                break;
                            }
                        }
                    }
                    else
                    {
                        user = store.GetStrangerByUin(fromUin); // 看看陌生人列表中有木有
                    }
                    if (user == null)
                    { // 还没有就新建一个陌生人,原理来说不应该这样。后面我就不知道怎么回复这消息了,但是消息是不能丢失的
                        user = new QQStranger
                        {
                            QQ       = pollData["ruin"].ToObject <long>(),
                            Uin      = fromUin,
                            Nickname = pollData["ruin"].ToString()
                        };
                        store.AddStranger((QQStranger)user);

                        // 获取用户信息
                        var userModule = Context.GetModule <UserModule>(QQModuleType.USER);
                        userModule.GetStrangerInfo(user, null);
                    }
                }
                user.QQ  = fromQQ; // 带上QQ号码
                msg.From = user;
                return(new QQNotifyEvent(QQNotifyEventType.ChatMsg, msg));
            }
            catch (Exception ex)
            {
                return(new QQNotifyEvent(QQNotifyEventType.NetError, ex));
            }
        }
Пример #14
0
 public GetDiscuzInfoAction(QQContext context, QQActionEventHandler listener, QQDiscuz discuz)
     : base(context, listener)
 {
     this.discuz = discuz;
 }
Пример #15
0
 /**
  * <p>deleteDiscuz.</p>
  *
  * @param discuz a {@link iqq.im.bean.QQDiscuz} object.
  */
 public void deleteDiscuz(QQDiscuz discuz)
 {
     discuzDictionary.Remove(discuz.getDid());
 }
Пример #16
0
 /**
  * <p>addDiscuz.</p>
  *
  * @param discuz a {@link iqq.im.bean.QQDiscuz} object.
  */
 public void addDiscuz(QQDiscuz discuz)
 {
     discuzDictionary.Add(discuz.getDid(), discuz);
 }