예제 #1
0
        public CommonOrderItem Add(SingleOrder order, TextRequest t)
        {
            if(item == null || item.IsDone())
            {
                item = new CommonOrderItem();
            }

            item.Add(order, t);

            if (item.IsDone())
            {                
                return item;
            }

            return null;
        }
예제 #2
0
        public override AbstractResponse OnTextRequest(TextRequest textRequest)
        {
            System.Collections.Generic.IList <ReplyInfo> kefuReplies = ReplyHelper.GetReplies(ReplyType.Kefu);
            if (!string.IsNullOrEmpty(textRequest.Content) && this.IsOpenManyService() && kefuReplies != null && kefuReplies.Count > 0)
            {
                List <string> kefuKeys = new List <string>();
                foreach (ReplyInfo item in kefuReplies)
                {
                    if (item.MatchType == MatchType.Equal)
                    {
                        if (item.Keys == textRequest.Content)
                        {
                            return(this.GotoManyCustomerService(textRequest));
                        }
                    }
                    else if (item.MatchType == MatchType.Like)
                    {
                        string[] keys = item.Keys.Split(',');
                        kefuKeys.AddRange(keys);
                    }
                }
                foreach (var key in kefuKeys)
                {
                    if (textRequest.Content.Contains(key))
                    {
                        return(this.GotoManyCustomerService(textRequest));
                    }
                }
            }
            AbstractResponse keyResponse = this.GetKeyResponse(textRequest.Content, textRequest);

            if (keyResponse != null)
            {
                return(keyResponse);
            }
            System.Collections.Generic.IList <ReplyInfo> replies = ReplyHelper.GetReplies(ReplyType.Keys);
            //if (replies == null || (replies.Count == 0 && this.IsOpenManyService()))
            //{
            //    this.GotoManyCustomerService(textRequest);
            //}
            if (replies != null && replies.Count > 0)
            {
                foreach (ReplyInfo current in replies)
                {
                    if (current.MatchType == MatchType.Equal && current.Keys == textRequest.Content)
                    {
                        AbstractResponse response = this.GetResponse(current, textRequest.FromUserName);
                        response.ToUserName   = textRequest.FromUserName;
                        response.FromUserName = textRequest.ToUserName;
                        AbstractResponse result = response;
                        return(result);
                    }
                    if (current.MatchType == MatchType.Like && current.Keys.Contains(textRequest.Content))
                    {
                        AbstractResponse response2 = this.GetResponse(current, textRequest.FromUserName);
                        response2.ToUserName   = textRequest.FromUserName;
                        response2.FromUserName = textRequest.ToUserName;
                        AbstractResponse result = response2;
                        return(result);
                    }
                }
            }
            return(this.DefaultResponse(textRequest));
        }
예제 #3
0
        public static AbstractRequest GetRequestEntity(XDocument doc)
        {
            RequestMsgType  msgType = MsgTypeHelper.GetMsgType(doc);
            AbstractRequest entity  = null;

            switch (msgType)
            {
            case RequestMsgType.Text:
                entity = new TextRequest();
                break;

            case RequestMsgType.Image:
                entity = new ImageRequest();
                break;

            case RequestMsgType.Voice:
                entity = new VoiceRequest();
                break;

            case RequestMsgType.Video:
                entity = new VideoRequest();
                break;

            case RequestMsgType.Location:
                entity = new LocationRequest();
                break;

            case RequestMsgType.Link:
                entity = new LinkRequest();
                break;

            case RequestMsgType.Event:
                switch (EventTypeHelper.GetEventType(doc))
                {
                case RequestEventType.Subscribe:
                    entity = new SubscribeEventRequest();
                    goto Label_00D7;

                case RequestEventType.UnSubscribe:
                    entity = new UnSubscribeEventRequest();
                    goto Label_00D7;

                case RequestEventType.Scan:
                    entity = new ScanEventRequest();
                    goto Label_00D7;

                case RequestEventType.Location:
                    entity = new LocationEventRequest();
                    goto Label_00D7;

                case RequestEventType.Click:
                    entity = new ClickEventRequest();
                    goto Label_00D7;

                case RequestEventType.MASSSENDJOBFINISH:
                    entity = new MassendJobFinishEventRequest();
                    goto Label_00D7;
                }
                throw new ArgumentOutOfRangeException();

            default:
                throw new ArgumentOutOfRangeException();
            }
Label_00D7:
            EntityHelper.FillEntityWithXml <AbstractRequest>(entity, doc);
            Regex regex = new Regex(@"<MsgID>(?<url>\d+)</MsgID>");

            if (entity.MsgId == 0L)
            {
                Match match = Regex.Match(doc.Root.ToString(), @"<MsgID>(?<msgid>\d+)</MsgID>", RegexOptions.IgnoreCase);
                if (match.Success)
                {
                    entity.MsgId      = long.Parse(match.Groups["msgid"].Value);
                    entity.CreateTime = DateTime.Now;
                }
            }
            return(entity);
        }
        public static AbstractRequest GetRequestEntity(XDocument doc)
        {
            RequestMsgType  msgType     = MsgTypeHelper.GetMsgType(doc);
            AbstractRequest textRequest = null;

            switch (msgType)
            {
            case RequestMsgType.Text:
            {
                textRequest = new TextRequest();
                break;
            }

            case RequestMsgType.Image:
            {
                textRequest = new ImageRequest();
                break;
            }

            case RequestMsgType.Voice:
            {
                textRequest = new VoiceRequest();
                break;
            }

            case RequestMsgType.Video:
            {
                textRequest = new VideoRequest();
                break;
            }

            case RequestMsgType.Location:
            {
                textRequest = new LocationRequest();
                break;
            }

            case RequestMsgType.Link:
            {
                textRequest = new LinkRequest();
                break;
            }

            case RequestMsgType.Event:
            {
                switch (EventTypeHelper.GetEventType(doc))
                {
                case RequestEventType.Subscribe:
                {
                    textRequest = new SubscribeEventRequest();
                    break;
                }

                case RequestEventType.UnSubscribe:
                {
                    textRequest = new UnSubscribeEventRequest();
                    break;
                }

                case RequestEventType.Scan:
                {
                    textRequest = new ScanEventRequest();
                    break;
                }

                case RequestEventType.Location:
                {
                    textRequest = new LocationEventRequest();
                    break;
                }

                case RequestEventType.Click:
                {
                    textRequest = new ClickEventRequest();
                    break;
                }

                default:
                {
                    throw new ArgumentOutOfRangeException();
                }
                }
                break;
            }

            default:
            {
                throw new ArgumentOutOfRangeException();
            }
            }
            EntityHelper.FillEntityWithXml <AbstractRequest>(textRequest, doc);
            return(textRequest);

            throw new ArgumentOutOfRangeException();
        }
예제 #5
0
 public virtual AbstractResponse OnTextRequest(TextRequest textRequest)
 {
     return(this.DefaultResponse(textRequest));
 }
예제 #6
0
 public IActionResult Summarize([FromBody] TextRequest Request)
 {
     return(Ok(_repo.Summarize(Request)));
 }
예제 #7
0
 public IActionResult Stem([FromBody] TextRequest Request)
 {
     return(Ok(_repo.Stem(Request)));
 }
예제 #8
0
 public abstract Task <VoiceRespone> Invork(TextRequest request);
예제 #9
0
        public static AbstractRequest GetRequestEntity(XDocument doc)
        {
            AbstractRequest abstractRequest;

            switch (MsgTypeHelper.GetMsgType(doc))
            {
            case RequestMsgType.Text:
                abstractRequest = new TextRequest();
                break;

            case RequestMsgType.Image:
                abstractRequest = new ImageRequest();
                break;

            case RequestMsgType.Voice:
                abstractRequest = new VoiceRequest();
                break;

            case RequestMsgType.Video:
                abstractRequest = new VideoRequest();
                break;

            case RequestMsgType.Location:
                abstractRequest = new LocationRequest();
                break;

            case RequestMsgType.Link:
                abstractRequest = new LinkRequest();
                break;

            case RequestMsgType.Event:
                switch (EventTypeHelper.GetEventType(doc))
                {
                case RequestEventType.Subscribe:
                    abstractRequest = new SubscribeEventRequest();
                    break;

                case RequestEventType.UnSubscribe:
                    abstractRequest = new UnSubscribeEventRequest();
                    break;

                case RequestEventType.Scan:
                    abstractRequest = new ScanEventRequest();
                    break;

                case RequestEventType.Location:
                    abstractRequest = new LocationEventRequest();
                    break;

                case RequestEventType.Click:
                    abstractRequest = new ClickEventRequest();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            EntityHelper.FillEntityWithXml <AbstractRequest>(abstractRequest, doc);
            return(abstractRequest);
        }
예제 #10
0
        /// <summary>
        /// 从文本信息中, 获取消息数据.
        /// </summary>
        /// <param name="weixin"></param>
        /// <returns></returns>
        public AbstractRequest ReadMessage(string weixin)
        {
            XmlDocument doc = new XmlDocument();

            //读取xml字符串
            doc.LoadXml(weixin);
            XmlElement root = doc.DocumentElement;

            // 获取收到的消息类型。文本(text),图片(image),语音等。
            XmlNode MsgType     = root.SelectSingleNode("MsgType");
            string  messageType = MsgType.InnerText;



            AbstractRequest resultMessage = null;

            try
            {
                switch (messageType)
                {
                case MessageType.TextMsgType:
                    if (logger.IsDebugEnabled)
                    {
                        logger.Debug("检测到文本消息,尝试解析..");
                    }
                    resultMessage = new TextRequest(doc);
                    break;

                case MessageType.ImageMsgType:
                    if (logger.IsDebugEnabled)
                    {
                        logger.Debug("检测到图片消息,尝试解析..");
                    }
                    resultMessage = new ImageRequest(doc);
                    break;

                case MessageType.VoiceMsgType:
                    if (logger.IsDebugEnabled)
                    {
                        logger.Debug("检测到语音消息,尝试解析..");
                    }
                    resultMessage = new VoiceRequest(doc);
                    break;

                case MessageType.VideoMsgType:
                    if (logger.IsDebugEnabled)
                    {
                        logger.Debug("检测到视频消息,尝试解析..");
                    }
                    resultMessage = new VideoRequest(doc);
                    break;

                case MessageType.LocationMsgType:
                    if (logger.IsDebugEnabled)
                    {
                        logger.Debug("检测到地理位置消息,尝试解析..");
                    }
                    resultMessage = new LocationRequest(doc);
                    break;


                case MessageType.LinkMsgType:
                    if (logger.IsDebugEnabled)
                    {
                        logger.Debug("检测到链接消息,尝试解析..");
                    }
                    resultMessage = new LinkRequest(doc);
                    break;



                case MessageType.EventMsgType:
                    if (logger.IsDebugEnabled)
                    {
                        logger.Debug("检测到事件消息,尝试解析..");
                    }
                    resultMessage = eventReader.ReadEvent(weixin);
                    break;


                default:
                    logger.WarnFormat("检测到了无法识别的信息:{0}", messageType);
                    break;
                }


                if (logger.IsDebugEnabled)
                {
                    logger.DebugFormat("消息解析结果:{0}", resultMessage);
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message, ex);
            }

            return(resultMessage);
        }
예제 #11
0
 public void EditTextRequest(TextRequest entity)
 {
     GenericEntityWrapper.EditEntity(entity);
 }
예제 #12
0
 public void AddTextRequest(TextRequest entity)
 {
     GenericEntityWrapper.AddEntity(entity);
 }
예제 #13
0
        public static AbstractRequest GetRequestEntity(XDocument doc)
        {
            RequestMsgType msgType = MsgTypeHelper.GetMsgType(doc);

            AbstractRequest entity = null;

            // System.IO.File.AppendAllText(@"E:\home\LocalUser\580442\www\humowang\api\type.txt", "msgType:" + msgType + "\r\n");
            switch (msgType)
            {
            case RequestMsgType.Text:
            {
                entity = new TextRequest();
                break;
            }

            case RequestMsgType.Image:
            {
                entity = new ImageRequest();
                break;
            }

            case RequestMsgType.Voice:
            {
                entity = new VoiceRequest();
                break;
            }

            case RequestMsgType.Video:
            {
                entity = new VideoRequest();
                break;
            }

            case RequestMsgType.Location:
            {
                entity = new LocationRequest();
                break;
            }

            case RequestMsgType.Link:
            {
                entity = new LinkRequest();
                break;
            }

            case RequestMsgType.Event:
            {
                switch (EventTypeHelper.GetEventType(doc))
                {
                case RequestEventType.Subscribe:
                {
                    entity = new SubscribeEventRequest();
                    //goto Label_00C5;
                    break;
                }

                case RequestEventType.UnSubscribe:
                {
                    entity = new UnSubscribeEventRequest();
                    //goto Label_00C5;
                    break;
                }

                case RequestEventType.Scan:
                {
                    entity = new ScanEventRequest();
                    // goto Label_00C5;
                    break;
                }

                case RequestEventType.Location:
                {
                    entity = new LocationEventRequest();
                    // goto Label_00C5;
                    break;
                }

                case RequestEventType.Click:
                {
                    entity = new ClickEventRequest();
                    // goto Label_00C5;
                    break;
                }

                case RequestEventType.VIEW:
                {
                    entity = new ViewEventRequest();
                    break;
                }

                default:
                {
                    throw new ArgumentOutOfRangeException();
                    // break;
                }
                }
                break;
            }

            default:
            {
                throw new ArgumentOutOfRangeException();
            }
            }

            //Label_00C5:
            EntityHelper.FillEntityWithXml <AbstractRequest>(entity, doc);

            return(entity);
        }
        public async Task <List <AnalysisResult> > AnalyzeAsync(List <string> input)
        {
            var result = new List <AnalysisResult>();

            using (var client = new HttpClient())
            {
                string response = default(string);

                client.BaseAddress = new Uri(BaseUrl);

                // Request headers.
                client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", _accountKey);
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                Document document = null;
                var      request  = new TextRequest()
                {
                    Documents = new List <Document>()
                };
                for (int i = 1; i <= input.Count; i++)
                {
                    document = new Document
                    {
                        Id   = i.ToString(),
                        Text = input[i - 1]
                    };

                    request.Documents.Add(document);
                }

                var serializedEntity = JsonConvert.SerializeObject(request);

                byte[] byteData = Encoding.UTF8.GetBytes(serializedEntity);

                // Detect key phrases:
                var uri = "text/analytics/v2.0/keyPhrases";
                response = await CallEndpoint(client, uri, byteData);

                var keyPhrases = JsonConvert.DeserializeObject <TextResponse <KeyPhraseResponse> >(response);

                // Detect sentiment:
                uri      = "text/analytics/v2.0/sentiment";
                response = await CallEndpoint(client, uri, byteData);

                var sentiment = JsonConvert.DeserializeObject <TextResponse <SentimentResponse> >(response);

                result = request.Documents
                         .Select(i =>
                {
                    var item = new AnalysisResult
                    {
                        Sentiment    = sentiment.Documents.Single(j => j.Id == i.Id).Score,
                        KeyPhrases   = keyPhrases.Documents.Single(j => j.Id == i.Id).KeyPhrases,
                        OriginalText = i.Text
                    };

                    return(item);
                })
                         .ToList();
            }

            return(result);
        }
예제 #15
0
        public static AbstractRequest GetRequestEntity(XDocument doc)
        {
            AbstractRequest abstractRequest;

            switch (MsgTypeHelper.GetMsgType(doc))
            {
            case RequestMsgType.Text:
                abstractRequest = new TextRequest();
                break;

            case RequestMsgType.Image:
                abstractRequest = new ImageRequest();
                break;

            case RequestMsgType.Voice:
                abstractRequest = new VoiceRequest();
                break;

            case RequestMsgType.Video:
                abstractRequest = new VideoRequest();
                break;

            case RequestMsgType.Location:
                abstractRequest = new LocationRequest();
                break;

            case RequestMsgType.Link:
                abstractRequest = new LinkRequest();
                break;

            case RequestMsgType.Event:
                switch (EventTypeHelper.GetEventType(doc))
                {
                case RequestEventType.Subscribe:
                    abstractRequest = new SubscribeEventRequest();
                    break;

                case RequestEventType.UnSubscribe:
                    abstractRequest = new UnSubscribeEventRequest();
                    break;

                case RequestEventType.Scan:
                    abstractRequest = new ScanEventRequest();
                    break;

                case RequestEventType.Location:
                    abstractRequest = new LocationEventRequest();
                    break;

                case RequestEventType.Click:
                    abstractRequest = new ClickEventRequest();
                    break;

                case RequestEventType.MASSSENDJOBFINISH:
                    abstractRequest = new MassendJobFinishEventRequest();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            EntityHelper.FillEntityWithXml <AbstractRequest>(abstractRequest, doc);
            Regex regex = new Regex("<MsgID>(?<url>\\d+)</MsgID>");

            if (abstractRequest.MsgId == 0L)
            {
                Match match = Regex.Match(doc.Root.ToString(), "<MsgID>(?<msgid>\\d+)</MsgID>", RegexOptions.IgnoreCase);
                if (match.Success)
                {
                    abstractRequest.MsgId      = long.Parse(match.Groups["msgid"].Value);
                    abstractRequest.CreateTime = DateTime.Now;
                }
            }
            return(abstractRequest);
        }
예제 #16
0
            public override async Task <TextProcessingServiceRespone> Invork(TextRequest textRequest)
            {
                var time = DateTime.Now;
                TextProcessingServiceRespone textProcessingServiceRespone = new TextProcessingServiceRespone()
                {
                    Id = textRequest.Id.Value
                };

                ApiAiSDK.Model.AIResponse aiResponse;
                ApiAiSDK.RequestExtras    requestExtras;
                DbClient db      = new DbClient();
                var      context = await db.GetContext(textRequest.Id.Value);

                if (context != null && !string.IsNullOrWhiteSpace(context.IntentContext))
                {
                    requestExtras = JsonConvert.DeserializeObject <ApiAiSDK.RequestExtras>(context.IntentContext);
                }
                else
                {
                    requestExtras = new ApiAiSDK.RequestExtras();
                }

                aiResponse = apiAi.TextRequest(textRequest.TextData, requestExtras);

                //TODO: Update Exceptions
                if (aiResponse == null)
                {
                    throw new Exception("Invalid output message");
                }

                requestExtras.Contexts = new List <ApiAiSDK.Model.AIContext>();
                foreach (var outContext in aiResponse.Result.Contexts)
                {
                    ApiAiSDK.Model.AIContext aIContext = new ApiAiSDK.Model.AIContext
                    {
                        Parameters = new Dictionary <string, string>(),
                        Lifespan   = outContext.Lifespan,
                        Name       = outContext.Name
                    };
                    foreach (var param in outContext.Parameters)
                    {
                        string key = param.Key;
                        string value;
                        if (param.Value != null)
                        {
                            value = param.Value.ToString();
                            aIContext.Parameters.Add(key, value);
                        }
                    }
                    requestExtras.Contexts.Add(aIContext);
                }
                if (requestExtras == null)
                {
                    requestExtras = new ApiAiSDK.RequestExtras();
                }
                if (context == null)
                {
                    context = new DbModels.UserContext()
                    {
                        Id = textRequest.Id.Value, IntentContext = "", TalkContext = "", TalkReplicCount = 0
                    }
                }
                ;
                context.IntentContext = JsonConvert.SerializeObject(requestExtras);
                await db.AddOrUpdateContext(context);

                requestExtras = null;
                db.Dispose();
                textProcessingServiceRespone.TextData = aiResponse.Result.Fulfillment.Speech;


                if (!string.IsNullOrWhiteSpace(aiResponse.Result.Action))
                {
                    foreach (var parametr in aiResponse.Result.Parameters)
                    {
                        if (!string.IsNullOrWhiteSpace(parametr.Value.ToString()))
                        {
                            textProcessingServiceRespone.Entities.Add(parametr.Key, parametr.Value.ToString());
                            if (parametr.Value.ToString().Contains("dress"))
                            {
                                textProcessingServiceRespone.WayPoint = "adidas";
                            }
                            else if (parametr.Value.ToString().Contains("shop"))
                            {
                                textProcessingServiceRespone.WayPoint = "adidas";
                            }
                            else if (parametr.Value.ToString().Contains("furniture"))
                            {
                                textProcessingServiceRespone.WayPoint = "adidas";
                            }
                            else if (parametr.Value.ToString().ToLower().Contains("ikea"))
                            {
                                textProcessingServiceRespone.WayPoint = "adidas";
                            }
                            else if (parametr.Value.ToString().ToLower().Contains("adidas"))
                            {
                                textProcessingServiceRespone.WayPoint = "adidas";
                            }
                        }
                    }
                    if (aiResponse.Result.Action == "navigation_shops")
                    {
                        textProcessingServiceRespone.WayPoint = "adidas";
                    }
                    if (aiResponse.Result.Action == "Cheese")
                    {
                        textProcessingServiceRespone.WayPoint = "cheese";
                    }
                    textProcessingServiceRespone.IntentName = aiResponse.Result.Action;
                }
                else
                {
                    textProcessingServiceRespone.IntentName = "none";
                }

                //DEBUG INFO
                #region DebugInfo
                if (SHOW_DEBUG_INFO)
                {
                    Console.WriteLine("Id: {0} | BOT PARAMS:", textRequest.Id.Value);
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.WriteLine("Intent {0}", textProcessingServiceRespone.IntentName);
                    Console.WriteLine("\tName\t\t\t|Value");
                    Console.ForegroundColor = ConsoleColor.DarkGreen;
                    foreach (var parametr in textProcessingServiceRespone.Entities)
                    {
                        Console.WriteLine("\t{0,-23} |{1}", parametr.Key, parametr.Value);
                    }
                    Console.WriteLine(textProcessingServiceRespone.WayPoint);
                    Console.ForegroundColor = ConsoleColor.Gray;

                    /*
                     * Console.WriteLine("User: "******"Masha: " + outputText);
                     * Console.ForegroundColor = ConsoleColor.DarkMagenta;
                     * Console.WriteLine("BOT CONTEXTS:");
                     * foreach (var context in aiResponse.Result.Contexts)
                     * {
                     *  Console.ForegroundColor = ConsoleColor.DarkCyan;
                     *  Console.WriteLine("## {0}", context.Name);
                     *  Console.ForegroundColor = ConsoleColor.Gray;
                     *  Console.WriteLine("\tName\t\t\t|Value");
                     *  Console.ForegroundColor = ConsoleColor.DarkGreen;
                     *  foreach (var parameter in context.Parameters)
                     *      Console.WriteLine("\t{0,-23} |{1}", parameter.Key, parameter.Value);
                     * }
                     * Console.ForegroundColor = ConsoleColor.Gray;
                     *
                     * Console.ForegroundColor = ConsoleColor.DarkMagenta;
                     * Console.WriteLine("BOT PARAMS:");
                     * Console.ForegroundColor = ConsoleColor.Gray;
                     * Console.WriteLine("\tName\t\t\t|Value");
                     * Console.ForegroundColor = ConsoleColor.DarkGreen;
                     * foreach (var parametr in aiResponse.Result.Parameters)
                     * {
                     *  Console.WriteLine("\t{0,-23} |{1}", parametr.Key, parametr.Value);
                     * }
                     * Console.ForegroundColor = ConsoleColor.Gray;
                     */
                }

                #endregion

                Log.LogInformation(textRequest.Id.Value, 0, this.GetType().ToString(), $"service end work in {(DateTime.Now - time).Milliseconds} ms");

                //Console.WriteLine("WayPoint: " + textProcessingServiceRespone.WayPoint);
                return(textProcessingServiceRespone);
            }
        }
예제 #17
0
        public static AbstractRequest GetRequestEntity(XDocument doc)
        {
            RequestMsgType  msgType = MsgTypeHelper.GetMsgType(doc);
            AbstractRequest entity  = null;

            switch (msgType)
            {
            case RequestMsgType.Text:
                entity = new TextRequest();
                break;

            case RequestMsgType.Image:
                entity = new ImageRequest();
                break;

            case RequestMsgType.Voice:
                entity = new VoiceRequest();
                break;

            case RequestMsgType.Video:
                entity = new VideoRequest();
                break;

            case RequestMsgType.Location:
                entity = new LocationRequest();
                break;

            case RequestMsgType.Link:
                entity = new LinkRequest();
                break;

            case RequestMsgType.Event:
                switch (EventTypeHelper.GetEventType(doc))
                {
                case RequestEventType.Subscribe:
                    entity = new SubscribeEventRequest();
                    goto Label_00C5;

                case RequestEventType.UnSubscribe:
                    entity = new UnSubscribeEventRequest();
                    goto Label_00C5;

                case RequestEventType.Scan:
                    entity = new ScanEventRequest();
                    goto Label_00C5;

                case RequestEventType.Location:
                    entity = new LocationEventRequest();
                    goto Label_00C5;

                case RequestEventType.Click:
                    entity = new ClickEventRequest();
                    goto Label_00C5;
                }
                throw new ArgumentOutOfRangeException();

            default:
                throw new ArgumentOutOfRangeException();
            }
Label_00C5:
            EntityHelper.FillEntityWithXml <AbstractRequest>(entity, doc);
            return(entity);
        }
예제 #18
0
        public static AbstractRequest GetRequestEntity(XDocument doc)
        {
            RequestMsgType msgType = MsgTypeHelper.GetMsgType(doc);
            AbstractRequest entity = null;
            switch (msgType)
            {
                case RequestMsgType.Text:
                    entity = new TextRequest();
                    break;

                case RequestMsgType.Image:
                    entity = new ImageRequest();
                    break;

                case RequestMsgType.Voice:
                    entity = new VoiceRequest();
                    break;

                case RequestMsgType.Video:
                    entity = new VideoRequest();
                    break;

                case RequestMsgType.Location:
                    entity = new LocationRequest();
                    break;

                case RequestMsgType.Link:
                    entity = new LinkRequest();
                    break;

                case RequestMsgType.Event:
                    //switch (EventTypeHelper.GetEventType(doc))
                    switch (doc.Root.Element("Event").Value.ToUpper())
                    {
                        //case RequestEventType.Subscribe:
                        case "SUBSCRIBE"://订阅(关注)
                            entity = new SubscribeEventRequest();
                            goto Label_00D1;

                        //case RequestEventType.UnSubscribe:
                        case "UNSUBSCRIBE"://取消订阅(关注)
                            entity = new UnSubscribeEventRequest();
                            goto Label_00D1;

                        //case RequestEventType.Scan:
                        case "SCAN"://二维码扫描
                            entity = new ScanEventRequest();
                            goto Label_00D1;

                        //case RequestEventType.Location:
                        case "LOCATION"://地理位置
                            entity = new LocationEventRequest();
                            goto Label_00D1;

                        //case RequestEventType.Click:
                        case "CLICK"://菜单点击
                            entity = new ClickEventRequest();
                            goto Label_00D1;

                        //case RequestEventType.MASSSENDJOBFINISH:
                        case "MASSSENDJOBFINISH":
                            entity = new MassendJobFinishEventRequest();
                            goto Label_00D1;

                        case "VIEW":
                            entity = new ViewEventRequest();
                            goto Label_00D1;

                        //default://其他意外类型(也可以选择抛出异常)
                        //    entity = new AbstractRequest();
                        //    goto Label_00D1;

                    }
                    throw new ArgumentOutOfRangeException();

                default:
                    throw new ArgumentOutOfRangeException();
            }
        Label_00D1:
            //EntityHelper.FillEntityWithXml<AbstractRequest>(entity, doc);
            //修改无法解析完整数据 2017.7.4
            EntityHelper.FillEntityWithXml(entity, doc);
            new Regex(@"<MsgID>(?<url>\d+)</MsgID>");
            if (entity.MsgId == 0L)
            {
                Match match = Regex.Match(doc.Root.ToString(), @"<MsgID>(?<msgid>\d+)</MsgID>", RegexOptions.IgnoreCase);
                if (match.Success)
                {
                    entity.MsgId = long.Parse(match.Groups["msgid"].Value);
                    entity.CreateTime = DateTime.Now;
                }
            }
            return entity;
        }