public override AbstractResponse OnTextRequest(TextRequest textRequest)
 {
     AbstractResponse keyResponse = this.GetKeyResponse(textRequest.Content, textRequest);
     if (keyResponse != null)
     {
         return keyResponse;
     }
     IList<ReplyInfo> replies = ReplyHelper.GetReplies(ReplyType.Keys);
     if ((replies == null) || ((replies.Count == 0) && this.IsOpenManyService()))
     {
         this.GotoManyCustomerService(textRequest);
     }
     foreach (ReplyInfo info in replies)
     {
         if ((info.MatchType == MatchType.Equal) && (info.Keys == textRequest.Content))
         {
             AbstractResponse response = this.GetResponse(info, textRequest.FromUserName);
             response.ToUserName = textRequest.FromUserName;
             response.FromUserName = textRequest.ToUserName;
             return response;
         }
         if ((info.MatchType == MatchType.Like) && info.Keys.Contains(textRequest.Content))
         {
             AbstractResponse response3 = this.GetResponse(info, textRequest.FromUserName);
             response3.ToUserName = textRequest.FromUserName;
             response3.FromUserName = textRequest.ToUserName;
             return response3;
         }
     }
     return this.DefaultResponse(textRequest);
 }
 public virtual AbstractResponse OnTextRequest(TextRequest textRequest)
 {
     return this.DefaultResponse(textRequest);
 }
        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;
        }