示例#1
0
    private List <MsgRequest> FormRequest()
    {
        List <MsgRequest> ret = new List <MsgRequest> ();
        //if (elist.Count == 0) {
        //	return null;
        //}
        var elist = EventReporter.ReportEvent();

        foreach (var e in elist)
        {
            var req     = new MsgRequest();
            var head    = new Head();
            var content = new Content();
            var msg     = new Msg();
            head.srcID   = e.sponsorId;
            head.srcType = SRCType.SIM;
            head.dstIDs.InsertRange(0, e.targetIdList);
            msg.type = Support.MsgTypeConverter(e.type);
            msg.body = World.GetInstance().GetGameObject(e.sponsorId).GetComponent <EventGenerator>().SelfSerialize(e.type, e.rawContent);
            content.msg.Add(msg);
            req.content = content;
            req.head    = head;
            ret.Add(req);
        }
        return(ret);
    }
示例#2
0
        public DTOResponse GetList(MsgRequest request)
        {
            DTOResponse dtoResponse = new DTOResponse();

            try
            {
                string   str1 = (string)null;
                string   str2 = (string)null;
                DateTime dt1;
                DateTime dt2;
                if (!string.IsNullOrEmpty(request.datetimerange) && request.datetimerange.Length > 10)
                {
                    string s1 = request.datetimerange.Substring(0, 10);
                    string s2 = request.datetimerange.Substring(13, 10);
                    DateTime.TryParse(s1, out dt1);
                    DateTime.TryParse(s2, out dt2);
                    str1 = dt1.ToString("yyyy-MM-dd HH:mm:ss");
                    str2 = dt2.ToString("yyyy-MM-dd HH:mm:ss");
                }
                else
                {
                    DateTime today = DateTime.Today;
                    dt1   = today.AddDays(-7.0);
                    today = DateTime.Today;
                    dt2   = today.AddDays(1.0);
                    str1  = dt1.ToString("yyyy-MM-dd HH:mm:ss");
                    str2  = dt2.ToString("yyyy-MM-dd HH:mm:ss");
                }
                using (IDbConnection dbConn = HelperConnection.GetConnectionFactory().OpenDbConnection())
                {
                    SqlExpression <SysAlterInfoEntity> expression = dbConn.From <SysAlterInfoEntity>();
                    expression.And((Expression <Func <SysAlterInfoEntity, bool> >)(x => x.CREATEDATETIME >= dt1 && x.CREATEDATETIME <= dt2));
                    if (!string.IsNullOrEmpty(request.MSGTEXT))
                    {
                        expression.And((Expression <Func <SysAlterInfoEntity, bool> >)(x => x.MSGTEXT.Contains(request.MSGTEXT)));
                    }
                    if (!string.IsNullOrEmpty(request.MSGTYPE) && request.MSGTYPE != "0")
                    {
                        expression.And((Expression <Func <SysAlterInfoEntity, bool> >)(x => x.MSGTYPE == request.MSGTYPE));
                    }
                    if (!string.IsNullOrEmpty(request.MSGSTATE))
                    {
                        expression.And((Expression <Func <SysAlterInfoEntity, bool> >)(x => x.MSGSTATE == request.MSGSTATE));
                    }
                    long num = dbConn.Count <SysAlterInfoEntity>(expression);
                    List <SysAlterInfoEntity> list = dbConn.Select <SysAlterInfoEntity>(expression).OrderByDescending <SysAlterInfoEntity, long>((Func <SysAlterInfoEntity, long>)(x => x.ID)).ToList <SysAlterInfoEntity>().Skip <SysAlterInfoEntity>((request.page - 1) * request.limit).Take <SysAlterInfoEntity>(request.limit).ToList <SysAlterInfoEntity>();
                    dtoResponse.TotalCount   = num;
                    dtoResponse.ResultObject = (object)list;
                    dtoResponse.IsSuccess    = true;
                    dtoResponse.MessageText  = "查询操作成功!";
                }
            }
            catch (Exception ex)
            {
                dtoResponse.IsSuccess   = false;
                dtoResponse.MessageText = ex.Message;
                MsgService.logger.Error((object)ex);
            }
            return(dtoResponse);
        }
        /// <summary>
        /// 执行微信消息处理
        /// </summary>
        /// <param name="signature">微信消息签名</param>
        /// <param name="timestamp">时间戳</param>
        /// <param name="nonce">随机字符串</param>
        /// <param name="body">请求参数主体</param>
        /// <returns>响应结果的Xml</returns>
        public string Execute(string signature, string timestamp, string nonce, Stream body)
        {
            WeChatEncryptMsg wechatMsg = new WeChatEncryptMsg()
            {
                MsgSignature = signature,
                Timestamp    = timestamp,
                Nonce        = nonce,
                Body         = body
            };
            MsgRequest msgRequest  = messageLinkUp.GetMsgRequestData(wechatMsg);
            string     responseXml = "success";

            if (msgRequest is SubscribeEvent)
            {
                responseXml = DealWithMsg(msgRequest as SubscribeEvent);
            }
            else if (msgRequest is ContentMsg)
            {
                responseXml = DealWithMsg(msgRequest as ContentMsg);
            }
            return(responseXml);
        }
示例#4
0
        public object Any(MsgRequest request)
        {
            DTOResponseLayUI dtoResponseLayUi = new DTOResponseLayUI();
            MsgService       msgService       = new MsgService();
            DTOResponse      response;

            if (request.ACTION == 100)
            {
                response = msgService.GetList(request);
            }
            if (request.ACTION == OPAction.QUERYDETAIL1)
            {
                response = msgService.GetOplogList(request);
            }
            else
            {
                dtoResponseLayUi.code = -1;
                dtoResponseLayUi.msg  = "未定义的操作类型:" + request.ACTION.ToString();
                return((object)dtoResponseLayUi);
            }
            return(this.ConvertTo(response));
        }
示例#5
0
        protected override Task OnMessageReceivedAsync(IWebSocketContext context,
                                                       byte[] rxBuffer,
                                                       IWebSocketReceiveResult rxResult)
        {
            var user_id = context.HttpContextId;
            TripleDESCryptoServiceProvider crypto;

            UserProfile profile;

            if (API.TripleDES.UserDict.TryGetValue(user_id, out profile))
            {
                // ----------------------------------------

                crypto = profile.crypto;
                MsgRequest req = new MsgRequest(crypto, rxBuffer);


                if (req.MsgId != profile.next_msg_id)
                {
                    return(Task.CompletedTask);
                }

                // ----------------------------------------

                if (req.Type == "str")
                {
                    string content = API.Encoding.ByteArrayToString(req.Data);

                    if (API.Keyboard.EnableAutoTyping)
                    {
                        API.Keyboard.SendString(content);
                    }

                    if (API.Keyboard.EnableClipboard)
                    {
                        API.Keyboard.SetClipboard(content);
                    }
                }

                // ----------------------------------------


                string pongEncrypted = req.GetResponse(profile);


                SendToOthersAsync(context, req.GetRepeat(profile));

                return(SendAsync(context, pongEncrypted));
            }
            else
            {
                // ----------------------------------------

                byte[] bytes = API.RSA.RSADecrypt(rxBuffer);

                if (bytes == null)
                {
                    return(Task.CompletedTask);
                }

                string[] splitted = API.Encoding.ByteArrayToString(bytes).Split(';');

                string type = splitted[0], key = splitted[1], iv = splitted[2];

                // ----------------------------------------

                if (type != "reg" || key.Length != 32 || iv.Length != 16)
                {
                    return(Task.CompletedTask);
                }

                crypto = API.TripleDES.createDESCrypto(key, iv);

                string next_msg_id = API.Util.GetRandomHexString(4);

                string helloRaw = "acc;" + user_id + ";" + next_msg_id;

                string helloEncrypted = API.Util.StringToEncryptHex(helloRaw, crypto);


                API.TripleDES.UserDict.Add(user_id, new UserProfile()
                {
                    userid = user_id, crypto = crypto, next_msg_id = next_msg_id
                });

                return(SendAsync(context, helloEncrypted));
            }
        }
示例#6
0
 public static bool SendGameInvite(MsgRequest request)
 {
     return(PrxMessagingSendGameInvite(request));
 }
示例#7
0
 public static bool SendMessage(MsgRequest request)
 {
     return(PrxMessagingSendMessage(request));
 }
示例#8
0
 private static extern bool PrxMessagingSendGameInvite(MsgRequest msgRequest);
示例#9
0
 public Message(MsgRequest type, string msg)
 {
     this.type = type;
     this.msg  = msg;
 }
示例#10
0
 public Message(MsgRequest type, int num)
 {
     this.type = type;
     this.num = num;
 }
示例#11
0
 public Message(MsgRequest type, string msg, double flt)
 {
     this.msg  = msg;
     this.type = type;
     this.flt  = flt;
 }
示例#12
0
 public Message(MsgRequest type, string msg, int num)
 {
     this.msg  = msg;
     this.type = type;
     this.num  = num;
 }
示例#13
0
 public Message(MsgRequest type, int num)
 {
     this.type = type;
     this.num  = num;
 }
示例#14
0
 public Message(MsgRequest type)
 {
     this.type = type;
 }
示例#15
0
 public Message(MsgRequest type, string msg)
 {
     this.type = type;
     this.msg = msg;
 }
示例#16
0
 public Message(MsgRequest type)
 {
     this.type = type;
 }
示例#17
0
        /// <summary>
        /// 从请求中提取微信消息推送的请求数据
        /// </summary>
        /// <param name="request">推送过来的请求</param>
        /// <returns>消息推送的请求数据</returns>
        public MsgRequest GetMsgRequestData(WeChatEncryptMsg requestEncryptMsg)
        {
            //微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次
            //消息排重,推荐使用msgid排重;事件类型消息推荐使用FromUserName + CreateTime 排重
            //服务器无法保证在五秒内处理并回复,直接回复success;直接回复空串,微信不再重试
            //开发者在5秒内未回复任何内容,开发者回复了异常数据,微信系统提示“该公众号暂时无法提供服务,请稍后再试”
            if (weChatConfig == null)
            {
                throw new NullReferenceException("请使用构造MessageLinkUp(idOrAppId),或初始化Initialize(idOrAppId)");
            }
            string xmlText;//消息

            if (weChatConfig.EnCrypt)
            {
                //消息是密文,要解密后处理
                xmlText = MessageDecrypt(requestEncryptMsg);
            }
            else
            {
                var          stream = requestEncryptMsg.Body; //具体消息数据在请求流里面
                StreamReader reader = new StreamReader(stream);
                xmlText = reader.ReadToEnd();                 //消息
                reader.Close();
            }
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(xmlText);
            XmlNode    rootNode   = xmlDoc.SelectSingleNode("xml");
            MsgRequest msgRequest = null;

            if (rootNode["MsgType"] == null)
            {
                msgRequest = new MsgRequest();
            }
            else
            {
                string msgType = rootNode["MsgType"].InnerText;
                switch (msgType)
                {
                case "text":
                    ContentMsg contentMsg = new ContentMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        contentMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["Content"] != null)
                    {
                        contentMsg.Content = rootNode["Content"].InnerText;
                    }
                    msgRequest = contentMsg;
                    break;

                case "image":
                    PictureMsg pictureMsg = new PictureMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        pictureMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["PicUrl"] != null)
                    {
                        pictureMsg.PicUrl = rootNode["PicUrl"].InnerText;
                    }
                    if (rootNode["MediaId"] != null)
                    {
                        pictureMsg.MediaId = rootNode["MediaId"].InnerText;
                    }
                    msgRequest = pictureMsg;
                    break;

                case "voice":
                    VoiceMsg voiceMsg = new VoiceMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        voiceMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["MediaId"] != null)
                    {
                        voiceMsg.MediaId = rootNode["MediaId"].InnerText;
                    }
                    if (rootNode["Format"] != null)
                    {
                        voiceMsg.Format = rootNode["Format"].InnerText;
                    }
                    if (rootNode["Recognition"] != null)
                    {
                        voiceMsg.Recognition = rootNode["Recognition"].InnerText;
                    }
                    msgRequest = voiceMsg;
                    break;

                case "video":
                    VideoMsg videoMsg = new VideoMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        videoMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["MediaId"] != null)
                    {
                        videoMsg.MediaId = rootNode["MediaId"].InnerText;
                    }
                    if (rootNode["ThumbMediaId"] != null)
                    {
                        videoMsg.ThumbMediaId = rootNode["ThumbMediaId"].InnerText;
                    }
                    msgRequest = videoMsg;
                    break;

                case "shortvideo":
                    ShortVideoMsg shortVideoMsg = new ShortVideoMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        shortVideoMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["MediaId"] != null)
                    {
                        shortVideoMsg.MediaId = rootNode["MediaId"].InnerText;
                    }
                    if (rootNode["ThumbMediaId"] != null)
                    {
                        shortVideoMsg.ThumbMediaId = rootNode["ThumbMediaId"].InnerText;
                    }
                    msgRequest = shortVideoMsg;
                    break;

                case "location":
                    LocationMsg locationMsg = new LocationMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        locationMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["Location_X"] != null)
                    {
                        locationMsg.Location_X = Convert.ToDouble(rootNode["Location_X"].InnerText);
                    }
                    if (rootNode["Location_Y"] != null)
                    {
                        locationMsg.Location_Y = Convert.ToDouble(rootNode["Location_Y"].InnerText);
                    }
                    if (rootNode["Scale"] != null)
                    {
                        locationMsg.Scale = int.Parse(rootNode["Scale"].InnerText);
                    }
                    if (rootNode["Label"] != null)
                    {
                        locationMsg.Label = rootNode["Label"].InnerText;
                    }
                    msgRequest = locationMsg;
                    break;

                case "link":
                    LinkMsg linkMsg = new LinkMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        linkMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["Title"] != null)
                    {
                        linkMsg.Title = rootNode["Title"].InnerText;
                    }
                    if (rootNode["Description"] != null)
                    {
                        linkMsg.Description = rootNode["Description"].InnerText;
                    }
                    if (rootNode["Url"] != null)
                    {
                        linkMsg.Url = rootNode["Url"].InnerText;
                    }
                    msgRequest = linkMsg;
                    break;

                case "event":
                    if (rootNode["Event"] != null)
                    {
                        string eventStr = rootNode["Event"].InnerText.ToLower();
                        switch (eventStr)
                        {
                        case "subscribe":
                            if (rootNode["EventKey"] != null)
                            {
                                string eventKey = rootNode["EventKey"].InnerText;
                                if (eventKey.StartsWith("qrscene_"))
                                {
                                    ScanSubscribeEvent scanSubscribeEvent = new ScanSubscribeEvent();
                                    scanSubscribeEvent.EventKey = eventKey;
                                    if (rootNode["Ticket"] != null)
                                    {
                                        scanSubscribeEvent.Ticket = rootNode["Ticket"].InnerText;
                                    }
                                    msgRequest = scanSubscribeEvent;
                                }
                            }
                            if (msgRequest == null)
                            {
                                msgRequest = new SubscribeEvent();
                            }
                            break;

                        case "unsubscribe": msgRequest = new UnSubscribeEvent(); break;

                        case "scan":
                            ScanEvent scanEvent = new ScanEvent();
                            if (rootNode["EventKey"] != null)
                            {
                                scanEvent.EventKey = rootNode["EventKey"].InnerText;
                            }
                            if (rootNode["Ticket"] != null)
                            {
                                scanEvent.Ticket = rootNode["Ticket"].InnerText;
                            }
                            msgRequest = scanEvent;
                            break;

                        case "location":
                            LocationEvent locationEvent = new LocationEvent();
                            if (rootNode["Latitude"] != null)
                            {
                                locationEvent.Latitude = double.Parse(rootNode["Latitude"].InnerText);
                            }
                            if (rootNode["Longitude"] != null)
                            {
                                locationEvent.Longitude = double.Parse(rootNode["Longitude"].InnerText);
                            }
                            if (rootNode["Precision"] != null)
                            {
                                locationEvent.Precision = double.Parse(rootNode["Precision"].InnerText);
                            }
                            msgRequest = locationEvent;
                            break;

                        case "click":
                            ClickEvent clickEvent = new ClickEvent();
                            if (rootNode["EventKey"] != null)
                            {
                                clickEvent.EventKey = rootNode["EventKey"].InnerText;
                            }
                            msgRequest = clickEvent;
                            break;

                        case "view":
                            ViewEvent viewEvent = new ViewEvent();
                            if (rootNode["EventKey"] != null)
                            {
                                viewEvent.EventKey = rootNode["EventKey"].InnerText;
                            }
                            msgRequest = viewEvent;
                            break;

                        case "masssendjobfinish":        //批量发送群发消息处理完成的消息通知
                            MassSendJobFinishEvent sendJobFinishEvent = new MassSendJobFinishEvent();
                            if (rootNode["MsgID"] != null)
                            {
                                sendJobFinishEvent.MsgID = int.Parse(rootNode["MsgID"].InnerText);
                            }
                            if (rootNode["Status"] != null)
                            {
                                sendJobFinishEvent.Status = Enum.Parse <MassSendJobStatus>(rootNode["Status"].InnerText);
                            }
                            if (rootNode["TotalCount"] != null)
                            {
                                sendJobFinishEvent.TotalCount = int.Parse(rootNode["TotalCount"].InnerText);
                            }
                            if (rootNode["FilterCount"] != null)
                            {
                                sendJobFinishEvent.FilterCount = int.Parse(rootNode["FilterCount"].InnerText);
                            }
                            if (rootNode["SentCount"] != null)
                            {
                                sendJobFinishEvent.SentCount = int.Parse(rootNode["SentCount"].InnerText);
                            }
                            if (rootNode["ErrorCount"] != null)
                            {
                                sendJobFinishEvent.ErrorCount = int.Parse(rootNode["ErrorCount"].InnerText);
                            }
                            XmlNodeList checkResultList = rootNode["CopyrightCheckResult"]?.ChildNodes;
                            if (checkResultList != null && checkResultList.Count > 0)
                            {
                                XmlNode countNode      = rootNode["CopyrightCheckResult"]["Count"];
                                XmlNode checkStateNode = rootNode["CopyrightCheckResult"]["CheckState"];
                                XmlNode resultListNode = rootNode["CopyrightCheckResult"]["ResultList"];
                                if (countNode != null)
                                {
                                    sendJobFinishEvent.CopyrightCheckCount = int.Parse(countNode.InnerText);
                                }
                                else if (checkStateNode != null)
                                {
                                    sendJobFinishEvent.CheckState = int.Parse(checkStateNode.InnerText);
                                }
                                else if (resultListNode != null)
                                {
                                    sendJobFinishEvent.ResultList = new List <ArticleCheckResult>();
                                    foreach (XmlNode itemNode in resultListNode)
                                    {
                                        sendJobFinishEvent.ResultList.Add(new ArticleCheckResult()
                                        {
                                            ArticleIdx            = int.Parse(itemNode["ArticleIdx"].InnerText),
                                            UserDeclareState      = int.Parse(itemNode["UserDeclareState"].InnerText),
                                            AuditState            = int.Parse(itemNode["AuditState"].InnerText),
                                            OriginalArticleUrl    = itemNode["OriginalArticleUrl"].InnerText,
                                            OriginalArticleType   = int.Parse(itemNode["OriginalArticleType"].InnerText),
                                            CanReprint            = bool.Parse(itemNode["CanReprint"].InnerText),
                                            NeedReplaceContent    = bool.Parse(itemNode["NeedReplaceContent"].InnerText),
                                            NeedShowReprintSource = bool.Parse(itemNode["NeedShowReprintSource"].InnerText),
                                        });
                                    }
                                }
                            }
                            msgRequest = sendJobFinishEvent;
                            break;

                        case "templatesendjobfinish":
                            TemplateSendJobFinishEvent templateSendFinishEvent = new TemplateSendJobFinishEvent();
                            if (rootNode["MsgID"] != null)
                            {
                                templateSendFinishEvent.MsgID = int.Parse(rootNode["MsgID"].InnerText);
                            }
                            if (rootNode["Status"] != null)
                            {
                                templateSendFinishEvent.Status = rootNode["Status"].InnerText;
                            }
                            break;

                        default: msgRequest = new MsgRequest(); break;
                        }
                    }
                    break;

                default: msgRequest = new MsgRequest(); break;
                }
                msgRequest.MsgType = msgType;
            }
            msgRequest.ToUserName   = rootNode["ToUserName"].InnerText;
            msgRequest.FromUserName = rootNode["FromUserName"].InnerText;
            msgRequest.CreateTime   = int.Parse(rootNode["CreateTime"].InnerText);

            return(msgRequest);
        }
示例#18
0
 public Message(MsgRequest type, string msg, int num)
 {
     this.msg = msg;
     this.type = type;
     this.num = num;
 }
示例#19
0
 private static extern bool PrxMessagingSendMessage(MsgRequest msgRequest);