Ejemplo n.º 1
0
        public wxMessage GetCommMessage(XmlDocument xmldoc)
        {
            wxMessage ret          = new wxMessage();
            XmlNode   ToUserName   = xmldoc.SelectSingleNode("/xml/ToUserName");
            XmlNode   FromUserName = xmldoc.SelectSingleNode("/xml/FromUserName");
            XmlNode   CreateTime   = xmldoc.SelectSingleNode("/xml/CreateTime");
            XmlNode   MsgType      = xmldoc.SelectSingleNode("/xml/MsgType");

            ret.ToUserName   = ToUserName.InnerText;
            ret.FromUserName = FromUserName.InnerText;
            ret.CreateTime   = CreateTime.InnerText;
            ret.MsgType      = MsgType.InnerText.ToLower();
            return(ret);
        }
Ejemplo n.º 2
0
        public string MakeTxMsg(wxMessage wxMsg, bool bACK)
        {
            string ret = "";
            string ToUserName;
            string FromUserName;

            if (bACK)
            {
                ToUserName   = wxMsg.FromUserName;
                FromUserName = wxMsg.ToUserName;
            }
            else
            {
                ToUserName   = wxMsg.ToUserName;
                FromUserName = wxMsg.FromUserName;
            }
            switch (wxMsg.MsgType)
            {
            case "text":
                ret = string.Format(ReplyType.Message_Text,
                                    ToUserName,
                                    FromUserName,
                                    DateTime.Now.Ticks,
                                    wxMsg.Content);
                break;

            case "news":
                string Articles = "";
                for (int i = 0; i < wxMsg.ArticleCount; i++)
                {
                    Articles += string.Format(ReplyType.Message_News_Item,
                                              wxMsg.NewsItemList[i].Title,
                                              wxMsg.NewsItemList[i].Description,
                                              wxMsg.NewsItemList[i].PicUrl,
                                              wxMsg.NewsItemList[i].Url);
                }
                ret = string.Format(ReplyType.Message_News_Main,
                                    ToUserName,
                                    FromUserName,
                                    DateTime.Now.Ticks,
                                    wxMsg.ArticleCount.ToString(),
                                    Articles);
                break;
            }
            return(ret);
        }
Ejemplo n.º 3
0
 public string MakeTxMsg(wxMessage wxMsg)
 {
     return(MakeTxMsg(wxMsg, true));
 }
Ejemplo n.º 4
0
        public wxMessage GetMessage(string postStr)
        {
            if (_queue.Count >= 50)
            {
                _queue = _queue.Where(q => { return(q.CreateTime.AddSeconds(20) > DateTime.Now); }).ToList(); //保留20秒内未响应的消息
            }
            wxMessage   ret    = null;                                                                        // new wxMessage();
            XmlDocument xmldoc = new XmlDocument();

            xmldoc.Load(new System.IO.MemoryStream(encoding.GetBytes(postStr)));
            ret = GetCommMessage(xmldoc);
            if (ret.MsgType == "event")//事件类型消息推荐使用FromUserName + CreateTime 排重
            {
                if (_queue.FirstOrDefault(m => { return((m.MsgFlag == ret.CreateTime) && (m.FromUser == ret.FromUserName)); }) == null)
                {
                    _queue.Add(new BaseMsg
                    {
                        CreateTime = DateTime.Now,
                        FromUser   = ret.FromUserName,
                        MsgFlag    = ret.CreateTime
                    });
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                if (_queue.FirstOrDefault(m => { return(m.MsgFlag == ret.MsgId); }) == null)
                {
                    _queue.Add(new BaseMsg
                    {
                        CreateTime = DateTime.Now,
                        FromUser   = ret.FromUserName,
                        MsgFlag    = ret.MsgId
                    });
                }
                else
                {
                    return(null);
                }
            }
            switch (ret.MsgType)
            {
            case "event":
                //responseContent = EventHandle(xmldoc);//事件处理
                ret.Event    = xmldoc.SelectSingleNode("/xml/Event").InnerText.ToLower();
                ret.EventKey = xmldoc.SelectSingleNode("/xml/EventKey").InnerText;
                break;

            case "text":
                //responseContent = TextHandle(xmldoc);//接受文本消息处理
                ret.Content = xmldoc.SelectSingleNode("/xml/Content").InnerText;
                ret.MsgId   = xmldoc.SelectSingleNode("/xml/MsgId").InnerText;
                break;

            default:
                break;
            }
            return(ret);
        }