Example #1
0
        public override AbstractResponse OnTextRequest(TextRequest textRequest)
        {
            WeiXinHelper.UpdateRencentOpenID(textRequest.FromUserName);
            AbstractResponse keyResponse = this.GetKeyResponse(textRequest.Content, textRequest);

            if (keyResponse != null)
            {
                return(keyResponse);
            }
            IList <Hidistro.Entities.VShop.ReplyInfo> replies = ReplyHelper.GetReplies(ReplyType.Keys);

            if ((replies == null) || ((replies.Count == 0) && this.IsOpenManyService()))
            {
                this.GotoManyCustomerService(textRequest);
            }
            foreach (Hidistro.Entities.VShop.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));
        }
Example #2
0
        public override AbstractResponse OnEvent_SubscribeRequest(SubscribeEventRequest subscribeEventRequest)
        {
            WriteLog("GetSubscribeReply");
            ReplyInfo        subscribeReply = ReplyHelper.GetSubscribeReply();
            AbstractResponse result;

            if (subscribeReply == null)
            {
                WriteLog("subscribeReply == null");
                result = null;
            }
            else
            {
                WriteLog("取消关注再关注,进入这个事件");
                subscribeReply.Keys = "登录";
                AbstractResponse response = this.GetResponse(subscribeReply, subscribeEventRequest.FromUserName);

                if (response == null)
                {
                    this.GotoManyCustomerService(subscribeEventRequest);
                }
                response.ToUserName   = subscribeEventRequest.FromUserName;
                response.FromUserName = subscribeEventRequest.ToUserName;
                result = response;
                //取消关注再关注,进入这个事件
                ScanVisitDistributor(subscribeEventRequest, subscribeEventRequest.EventKey);
            }
            return(result);
        }
Example #3
0
        public override AbstractResponse OnEvent_ClickRequest(ClickEventRequest clickEventRequest)
        {
            WeiXinHelper.UpdateRencentOpenID(clickEventRequest.FromUserName);
            Hidistro.Entities.VShop.MenuInfo menu = VShopHelper.GetMenu(Convert.ToInt32(clickEventRequest.EventKey));
            if (menu == null)
            {
                return(null);
            }
            Hidistro.Entities.VShop.ReplyInfo reply = ReplyHelper.GetReply(menu.ReplyId);
            if (reply == null)
            {
                return(null);
            }
            AbstractResponse keyResponse = this.GetKeyResponse(reply.Keys, clickEventRequest);

            if (keyResponse != null)
            {
                return(keyResponse);
            }
            AbstractResponse response = this.GetResponse(reply, clickEventRequest.FromUserName);

            if (response == null)
            {
                this.GotoManyCustomerService(clickEventRequest);
            }
            response.ToUserName   = clickEventRequest.FromUserName;
            response.FromUserName = clickEventRequest.ToUserName;
            return(response);
        }
Example #4
0
        public AbstractResponse OnEventRequest(EventRequest eventRequest)
        {
            AbstractResponse result = null;

            switch (eventRequest.Event)
            {
            case RequestEventType.Subscribe:
                result = this.OnEvent_SubscribeRequest(eventRequest as SubscribeEventRequest);
                break;

            case RequestEventType.UnSubscribe:
                result = this.OnEvent_UnSubscribeRequest(eventRequest as UnSubscribeEventRequest);
                break;

            case RequestEventType.Scan:
                this.ResponseMessage = this.OnEvent_ScanRequest(eventRequest as ScanEventRequest);
                break;

            case RequestEventType.Location:
                result = this.OnEvent_LocationRequest(eventRequest as LocationEventRequest);
                break;

            case RequestEventType.Click:
                result = this.OnEvent_ClickRequest(eventRequest as ClickEventRequest);
                break;

            default:
                throw new WeixinException("未知的Event下属请求信息");
            }
            return(result);
        }
Example #5
0
        public override AbstractResponse OnEvent_ClickRequest(ClickEventRequest clickEventRequest)
        {
            int      num      = clickEventRequest.EventKey.ToInt(0);
            MenuInfo menuInfo = null;

            if (num > 0)
            {
                menuInfo = VShopHelper.GetMenu(num);
            }
            if (menuInfo == null)
            {
                return(null);
            }
            ReplyInfo reply = ReplyHelper.GetReply(menuInfo.ReplyId);

            if (reply == null)
            {
                return(null);
            }
            AbstractResponse keyResponse = this.GetKeyResponse(reply.Keys, clickEventRequest);

            if (keyResponse != null)
            {
                return(keyResponse);
            }
            AbstractResponse response = this.GetResponse(reply, clickEventRequest.FromUserName, null);

            if (response == null)
            {
                return(this.GotoManyCustomerService(clickEventRequest));
            }
            response.ToUserName   = clickEventRequest.FromUserName;
            response.FromUserName = clickEventRequest.ToUserName;
            return(response);
        }
Example #6
0
        public override AbstractResponse OnTextRequest(TextRequest textRequest)
        {
            WeiXinHelper.UpdateRencentOpenID(textRequest.FromUserName);
            AbstractResponse keyResponse = this.GetKeyResponse(textRequest.Content, textRequest);

            if (keyResponse != null)
            {
                return(keyResponse);
            }
            System.Collections.Generic.IList <Hidistro.Entities.VShop.ReplyInfo> replies = ReplyHelper.GetReplies(ReplyType.Keys);
            if (replies == null || (replies.Count == 0 && this.IsOpenManyService()))
            {
                this.GotoManyCustomerService(textRequest);
            }
            foreach (Hidistro.Entities.VShop.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));
        }
Example #7
0
        public override AbstractResponse DefaultResponse(AbstractRequest requestMessage)
        {
            ReplyInfo        mismatchReply = ReplyHelper.GetMismatchReply();
            AbstractResponse result;

            if (mismatchReply == null || this.IsOpenManyService())
            {
                result = this.GotoManyCustomerService(requestMessage);
            }
            else
            {
                AbstractResponse response = this.GetResponse(mismatchReply, requestMessage.FromUserName);
                if (response == null)
                {
                    result = this.GotoManyCustomerService(requestMessage);
                }
                else
                {
                    response.ToUserName   = requestMessage.FromUserName;
                    response.FromUserName = requestMessage.ToUserName;
                    result = response;
                }
            }
            return(result);
        }
Example #8
0
        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()))
            {
                return(this.GotoManyCustomerService(textRequest));
            }
            foreach (ReplyInfo item in replies)
            {
                if (item.MatchType == MatchType.Equal && item.Keys == textRequest.Content)
                {
                    AbstractResponse response = this.GetResponse(item, textRequest.FromUserName, null);
                    response.ToUserName   = textRequest.FromUserName;
                    response.FromUserName = textRequest.ToUserName;
                    return(response);
                }
                if (item.MatchType == MatchType.Like && item.Keys.Contains(textRequest.Content))
                {
                    AbstractResponse response2 = this.GetResponse(item, textRequest.FromUserName, null);
                    response2.ToUserName   = textRequest.FromUserName;
                    response2.FromUserName = textRequest.ToUserName;
                    return(response2);
                }
            }
            return(this.DefaultResponse(textRequest));
        }
Example #9
0
        public override AbstractResponse OnEvent_ClickRequest(ClickEventRequest clickEventRequest)
        {
            int      menuId = System.Convert.ToInt32(clickEventRequest.EventKey);
            MenuInfo menu   = VShopHelper.GetMenu(menuId);

            if (menu == null)
            {
                return(null);
            }
            ReplyInfo reply = ReplyHelper.GetReply(menu.ReplyId);

            if (reply == null)
            {
                return(null);
            }
            //if (reply.ReplyType == ReplyType.Kefu)不合法
            //{
            //    this.GotoManyCustomerService(clickEventRequest);
            //}
            AbstractResponse keyResponse = this.GetKeyResponse(reply.Keys, clickEventRequest);

            if (keyResponse != null)
            {
                return(keyResponse);
            }
            AbstractResponse response = this.GetResponse(reply, clickEventRequest.FromUserName);

            if (response == null)
            {
                this.GotoManyCustomerService(clickEventRequest);
            }
            response.ToUserName   = clickEventRequest.FromUserName;
            response.FromUserName = clickEventRequest.ToUserName;
            return(response);
        }
        private void HandleRowSetResult(AbstractResponse response)
        {
            ValidateResult(response);
            var resultResponse = (ResultResponse)response;

            if (resultResponse.Output is OutputSchemaChange)
            {
                //Schema changes need to do blocking operations
                HandleSchemaChange(resultResponse);
                return;
            }
            RowSet rs;

            if (resultResponse.Output is OutputRows)
            {
                rs = ((OutputRows)resultResponse.Output).RowSet;
            }
            else
            {
                if (resultResponse.Output is OutputSetKeyspace)
                {
                    ((Session)_session).Keyspace = ((OutputSetKeyspace)resultResponse.Output).Value;
                }
                rs = new RowSet();
            }
            _parent.SetCompleted(null, FillRowSet(rs, resultResponse));
        }
 public void HandleResponse(Exception ex, AbstractResponse response)
 {
     if (_parent.HasCompleted())
     {
         //Do nothing else, another execution finished already set the response
         return;
     }
     try
     {
         if (ex != null)
         {
             HandleException(ex);
             return;
         }
         if (typeof(T) == typeof(RowSet))
         {
             HandleRowSetResult(response);
             return;
         }
         if (typeof(T) == typeof(PreparedStatement))
         {
             HandlePreparedResult(response);
             return;
         }
         throw new DriverInternalError(String.Format("RequestExecution with type {0} is not supported", typeof(T).FullName));
     }
     catch (Exception handlerException)
     {
         _parent.SetCompleted(handlerException);
     }
 }
Example #12
0
        public AbstractResponse OnEventRequest(EventRequest eventRequest)
        {
            AbstractResponse response = null;

            switch (eventRequest.Event)
            {
            case RequestEventType.Subscribe:
                return(this.OnEvent_SubscribeRequest(eventRequest as SubscribeEventRequest));

            case RequestEventType.UnSubscribe:
                return(this.OnEvent_UnSubscribeRequest(eventRequest as UnSubscribeEventRequest));

            case RequestEventType.Scan:
                this.ResponseMessage = this.OnEvent_ScanRequest(eventRequest as ScanEventRequest);
                return(response);

            case RequestEventType.Location:
                return(this.OnEvent_LocationRequest(eventRequest as LocationEventRequest));

            case RequestEventType.Click:
                return(this.OnEvent_ClickRequest(eventRequest as ClickEventRequest));

            case RequestEventType.MASSSENDJOBFINISH:
                return(this.OnEvent_MassendJobFinishEventRequest(eventRequest as MassendJobFinishEventRequest));

            case RequestEventType.VIEW:    //URL跳转(view视图)
                return(this.OnEvent_ViewRequest(eventRequest as ViewEventRequest));
            }
            throw new WeixinException("未知的Event下属请求信息");
        }
Example #13
0
        public AbstractResponse PrepareComposeResponse(AbstractResponse response)
        {
            response.MessageError = response.Error != null?FormatErrorMessage(response.Error.Description) : null;

            response.ResponseCode = response.Error != null ? ResponseCode.ERROR : ResponseCode.SUCCESS;
            return(response);
        }
Example #14
0
        private Task SendFileResponseExtensions(
            HttpContext context,
            AbstractResponse response,
            DateTime beginTime)
        {
            response.Duration = (int)(DateTime.Now - beginTime).TotalMilliseconds;
            string responseBody = new JsonSerializer().Serialize(response);

            if (response is ErrorResponse)
            {
                context.Response.StatusCode = StatusCodes.Status400BadRequest;
            }
            else if (response is AccessLimitedResponse)
            {
                context.Response.StatusCode = StatusCodes.Status401Unauthorized;
            }
            else if (response is ExceptionResponse)
            {
                context.Response.StatusCode = StatusCodes.Status500InternalServerError;
            }

            context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
            context.Response.Headers.Add("Keep-Alive", "timeout=500, max=100");

            context.Response.ContentLength = responseBody.Length;
            return(context.Response.WriteAsync(responseBody));
        }
Example #15
0
 public virtual void SendMessage(Guid userID, AbstractResponse resp = null)
 {
     if (resp == null)
     {
         resp = this.response;
     }
     sender.SendMessage(userID, resp);
 }
Example #16
0
        public override AbstractResponse OnEvent_SubscribeRequest(SubscribeEventRequest subscribeEventRequest)
        {
            string text = "";

            if (subscribeEventRequest.EventKey != null)
            {
                text = subscribeEventRequest.EventKey;
            }
            if (text.Contains("qrscene_"))
            {
                text = text.Replace("qrscene_", "").Trim();
                if (text == "1")
                {
                    if (WeiXinHelper.BindAdminOpenId.Count > 10)
                    {
                        WeiXinHelper.BindAdminOpenId.Clear();
                    }
                    if (WeiXinHelper.BindAdminOpenId.ContainsKey(subscribeEventRequest.Ticket))
                    {
                        WeiXinHelper.BindAdminOpenId[subscribeEventRequest.Ticket] = subscribeEventRequest.FromUserName;
                    }
                    else
                    {
                        WeiXinHelper.BindAdminOpenId.Add(subscribeEventRequest.Ticket, subscribeEventRequest.FromUserName);
                    }
                    return(new TextResponse
                    {
                        CreateTime = System.DateTime.Now,
                        Content = "您正在扫描尝试绑定管理员身份,身份已识别",
                        ToUserName = subscribeEventRequest.FromUserName,
                        FromUserName = subscribeEventRequest.ToUserName
                    });
                }
                ScanInfos scanInfosByTicket = ScanHelp.GetScanInfosByTicket(subscribeEventRequest.Ticket);
                Globals.Debuglog(text + ":" + subscribeEventRequest.Ticket, "_Debuglog.txt");
                if (!MemberProcessor.IsExitOpenId(subscribeEventRequest.FromUserName) && scanInfosByTicket != null && scanInfosByTicket.BindUserId > 0)
                {
                    this.CreatMember(subscribeEventRequest.FromUserName, scanInfosByTicket.BindUserId);
                    ScanHelp.updateScanInfosLastActiveTime(System.DateTime.Now, scanInfosByTicket.Sceneid);
                }
            }
            WeiXinHelper.UpdateRencentOpenID(subscribeEventRequest.FromUserName);
            Hidistro.Entities.VShop.ReplyInfo subscribeReply = ReplyHelper.GetSubscribeReply();
            if (subscribeReply == null)
            {
                return(null);
            }
            subscribeReply.Keys = "登录";
            AbstractResponse response = this.GetResponse(subscribeReply, subscribeEventRequest.FromUserName);

            if (response == null)
            {
                this.GotoManyCustomerService(subscribeEventRequest);
            }
            response.ToUserName   = subscribeEventRequest.FromUserName;
            response.FromUserName = subscribeEventRequest.ToUserName;
            return(response);
        }
 public static void AddWarning(this AbstractResponse response, string description, string parameter = null)
 {
     response.Errors.Add(new ResponseError()
     {
         ErrorType     = ErrorTypes.MissingData,
         Description   = description,
         ParameterName = parameter
     });
 }
 public static void AddNoPermissionError(this AbstractResponse response, string description = "")
 {
     response.HasError = true;
     response.Errors.Add(new ResponseError()
     {
         ErrorType   = ErrorTypes.NoPermission,
         Description = description
     });
 }
 public static void AddMissingDataError(this AbstractResponse response, string description, string parameter)
 {
     response.HasError = true;
     response.Errors.Add(new ResponseError()
     {
         ErrorType     = ErrorTypes.MissingData,
         Description   = description,
         ParameterName = parameter
     });
 }
 public static void AddNotFoundError(this AbstractResponse response, string parameterName)
 {
     response.HasError = true;
     response.Errors.Add(new ResponseError()
     {
         ErrorType     = ErrorTypes.InvalidData,
         Description   = $"The data for {parameterName} was not found.",
         ParameterName = parameterName
     });
 }
        public void Ctor_NoFlags_BodyStreamPositionIsZero()
        {
            // Arrange
            var frame = new ResponseFrame(new FrameHeader(), new MemoryStream(new byte[] { 1 }));

            // Act
            var uut = new AbstractResponse(frame);

            // Assert
            Assert.AreEqual(0, frame.Body.Position);
        }
        public void Ctor_NoFlags_TraceIdIsNull()
        {
            // Arrange
            var frame = new ResponseFrame(new FrameHeader(), new MemoryStream());

            // Act
            var uut = new AbstractResponse(frame);

            // Assert
            Assert.IsNull(uut.TraceId);
        }
 private static void ValidateResult(AbstractResponse response)
 {
     if (response == null)
     {
         throw new DriverInternalError("Response can not be null");
     }
     if (!(response is ResultResponse))
     {
         throw new DriverInternalError("Excepted ResultResponse, obtained " + response.GetType().FullName);
     }
 }
        public void Ctor_NoFlags_TraceIdIsNull()
        {
            // Arrange
            var frame = new ResponseFrame(new FrameHeader(), new MemoryStream());

            // Act
            var uut = new AbstractResponse(frame);

            // Assert
            Assert.IsNull(uut.TraceId);
        }
    /// <summary>
    /// The OnInspectorGUI
    /// </summary>
    public override void OnInspectorGUI()
    {
        instance.Event = (GameEvent)EditorGUILayout.ObjectField("Event", instance.Event, typeof(GameEvent), false, null);

        Rect rect = GUILayoutUtility.GetRect(0, 40, GUILayout.ExpandWidth(true));

        GUI.Box(rect, "Drop Response objects here!");
        if (rect.Contains(Event.current.mousePosition))
        {
            if (Event.current.type == EventType.DragUpdated)
            {
                DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                Event.current.Use();
            }

            if (Event.current.type == EventType.DragPerform)
            {
                foreach (Object o in DragAndDrop.objectReferences)
                {
                    AbstractResponse r = (AbstractResponse)o;
                    if (r != null)
                    {
                        instance.Responses.Add(r);
                        showResponses.Add(true);
                    }
                }
                Event.current.Use();
            }
        }

        for (int i = 0; i < instance.Responses.Count; i++)
        {
            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
            EditorGUILayout.BeginHorizontal();
            showResponses[i]      = EditorGUILayout.Foldout(showResponses[i], "Response " + (i + 1));
            instance.Responses[i] = (AbstractResponse)
                                    EditorGUILayout.ObjectField("", instance.Responses[i], typeof(AbstractResponse), false, null);

            if (instance.Responses[i] == null)
            {
                instance.Responses.RemoveAt(i);
                showResponses.RemoveAt(i);
                break;
            }

            EditorGUILayout.EndHorizontal();
            if (showResponses[i])
            {
                CreateEditor(instance.Responses[i]).OnInspectorGUI();
            }
            EditorGUILayout.EndVertical();
        }
    }
Example #26
0
        public override AbstractResponse OnEvent_ScanRequest(ScanEventRequest scanEventRequest)
        {
            string eventKey = scanEventRequest.EventKey;

            if (eventKey == "1")
            {
                if (WeiXinHelper.BindAdminOpenId.Count > 10)
                {
                    WeiXinHelper.BindAdminOpenId.Clear();
                }
                if (WeiXinHelper.BindAdminOpenId.ContainsKey(scanEventRequest.Ticket))
                {
                    WeiXinHelper.BindAdminOpenId[scanEventRequest.Ticket] = scanEventRequest.FromUserName;
                }
                else
                {
                    WeiXinHelper.BindAdminOpenId.Add(scanEventRequest.Ticket, scanEventRequest.FromUserName);
                }
                return(new TextResponse {
                    CreateTime = DateTime.Now, Content = "您正在扫描尝试绑定管理员身份,身份已识别", ToUserName = scanEventRequest.FromUserName, FromUserName = scanEventRequest.ToUserName
                });
            }
            ScanInfos scanInfosByTicket = ScanHelp.GetScanInfosByTicket(scanEventRequest.Ticket);

            Globals.Debuglog(eventKey + ":" + scanEventRequest.Ticket, "_Debuglog.txt");
            bool flag = MemberProcessor.IsExitOpenId(scanEventRequest.FromUserName);

            if ((!flag && (scanInfosByTicket != null)) && (scanInfosByTicket.BindUserId > 0))
            {
                this.CreatMember(scanEventRequest.FromUserName, scanInfosByTicket.BindUserId);
            }
            if (scanInfosByTicket != null)
            {
                ScanHelp.updateScanInfosLastActiveTime(DateTime.Now, scanInfosByTicket.Sceneid);
            }
            if (flag)
            {
                return(new TextResponse {
                    CreateTime = DateTime.Now, Content = "您刚扫描了分销商公众号二维码!", ToUserName = scanEventRequest.FromUserName, FromUserName = scanEventRequest.ToUserName
                });
            }
            Hidistro.Entities.VShop.ReplyInfo subscribeReply = ReplyHelper.GetSubscribeReply();
            if (subscribeReply == null)
            {
                return(null);
            }
            subscribeReply.Keys = "扫描";
            AbstractResponse response = this.GetResponse(subscribeReply, scanEventRequest.FromUserName);

            response.ToUserName   = scanEventRequest.FromUserName;
            response.FromUserName = scanEventRequest.ToUserName;
            return(response);
        }
Example #27
0
        public AbstractResponse OnEventRequest(EventRequest eventRequest)
        {
            AbstractResponse response = null;

            WriteLog("start2:" + eventRequest.Event);
            switch (eventRequest.Event)
            {
            case RequestEventType.Subscribe:
            {
                response = this.OnEvent_SubscribeRequest(eventRequest as SubscribeEventRequest);
                break;
            }

            case RequestEventType.UnSubscribe:
            {
                response = this.OnEvent_UnSubscribeRequest(eventRequest as UnSubscribeEventRequest);
                break;
            }

            case RequestEventType.Scan:
            {
                this.ResponseMessage = this.OnEvent_ScanRequest(eventRequest as ScanEventRequest);
                break;
            }

            case RequestEventType.Location:
            {
                response = this.OnEvent_LocationRequest(eventRequest as LocationEventRequest);
                break;
            }

            case RequestEventType.Click:
            {
                response = this.OnEvent_ClickRequest(eventRequest as ClickEventRequest);
                break;
            }

            case RequestEventType.VIEW:
            {
                response = this.OnEvent_ViewRequest(eventRequest as ViewEventRequest);
                break;
            }

            default:
            {
                throw new WeixinException("未知的Event下属请求信息");
                // break;
            }
            }

            return(response);
        }
Example #28
0
        public AbstractResponse GotoManyCustomerService(AbstractRequest requestMessage)
        {
            if (!this.IsOpenManyService())
            {
                return(null);
            }
            AbstractResponse abstractResponse = new AbstractResponse();

            abstractResponse.FromUserName = requestMessage.ToUserName;
            abstractResponse.ToUserName   = requestMessage.FromUserName;
            abstractResponse.MsgType      = ResponseMsgType.transfer_customer_service;
            return(abstractResponse);
        }
Example #29
0
        public void Execute()
        {
            if (RequestMessage != null)
            {
                switch (RequestMessage.MsgType)
                {
                case RequestMsgType.Text:
                {
                    ResponseMessage = OnTextRequest(RequestMessage as TextRequest);
                    return;
                }

                case RequestMsgType.Image:
                {
                    ResponseMessage = OnImageRequest(RequestMessage as ImageRequest);
                    return;
                }

                case RequestMsgType.Voice:
                {
                    ResponseMessage = OnVoiceRequest(RequestMessage as VoiceRequest);
                    return;
                }

                case RequestMsgType.Video:
                {
                    ResponseMessage = OnVideoRequest(RequestMessage as VideoRequest);
                    return;
                }

                case RequestMsgType.Location:
                {
                    ResponseMessage = OnLocationRequest(RequestMessage as LocationRequest);
                    return;
                }

                case RequestMsgType.Link:
                {
                    ResponseMessage = OnLinkRequest(RequestMessage as LinkRequest);
                    return;
                }

                case RequestMsgType.Event:
                {
                    ResponseMessage = OnEventRequest(RequestMessage as EventRequest);
                    return;
                }
                }
                throw new WeixinException("未知的MsgType请求类型");
            }
        }
Example #30
0
        /// <summary>
        /// 服务器响应微信请求
        /// </summary>
        /// <param name="weixin"></param>
        /// <returns></returns>
        private ActionResult ResponseMsg(string weixin)
        {
            // 尝试读取消息.
            AbstractRequest requestMessage = messageReader.ReadMessage(weixin);

            if (logger.IsDebugEnabled)
            {
                logger.DebugFormat("尝试读取消息, 读取结果: {0}", requestMessage);
            }

            if (requestMessage == null)
            {
                logger.Warn("无法识别的消息!");

                // 无法识别的消息.
                return(Content(""));
            }



            // 消息处理管理器.
            ProcessServerManager manager = ProcessServerManager.Instance();
            // 处理具体请求.
            AbstractResponse response = manager.ProcessRequest(requestMessage);


            if (logger.IsDebugEnabled)
            {
                logger.DebugFormat("尝试处理消息, 处理结果: {0}", response);
            }


            if (response != null)
            {
                // 处理成功.
                string xmlData = response.ToXml();

                if (logger.IsDebugEnabled)
                {
                    logger.DebugFormat("提交反馈的 XML 消息: {0}", xmlData);
                }

                return(Content(xmlData, "text/xml", Encoding.UTF8));
            }

            logger.WarnFormat("存在有消息,没有进行处理:{0}", weixin);
            return(Content(""));
        }
        public void Ctor_TraceFlagSet_BytesReadFromFrame()
        {
            // Arrange
            var header = new FrameHeader {
                Flags = AbstractResponse.TraceFlagValue
            };
            var body  = new MemoryStream(new byte[20]);
            var frame = new ResponseFrame(header, body);

            // Act
            var uut = new AbstractResponse(frame);

            // Assert
            Assert.AreEqual(16, body.Position);
            Assert.AreEqual(20, body.Length);
        }
        public void Ctor_TraceFlagSet_TraceIdIsSet()
        {
            // Arrange
            var header = new FrameHeader {Flags = FrameHeader.HeaderFlag.Tracing};
            var rnd = new Random();
            var buffer = new byte[16];
            rnd.NextBytes(buffer);
            var expected = new Guid(TypeCodec.GuidShuffle(buffer));
            var body = new MemoryStream(buffer);
            var frame = new ResponseFrame(header, body);

            // Act
            var uut = new AbstractResponse(frame);

            // Assert
            Assert.AreEqual(expected, uut.TraceId);
        }
Example #33
0
 /// <summary>
 /// Process and respond to a token request using HttpListenerRequest and HttpListenerResponse objects.
 /// </summary>
 /// <param name="request">Request to process.</param>
 /// <param name="response">Response object to respond with.</param>
 /// <param name="mode">Token request mode.</param>
 /// <param name="store">Token storage object.</param>
 public static void HandleTokenRequest(HttpListenerRequest request, HttpListenerResponse response, ServerRequestMode mode, IServerTokenStore store)
 {
     AbstractRequest arequest = new AbstractRequest(request);
     AbstractResponse aresponse = new AbstractResponse(response);
     HandleHttpTokenRequest(arequest, aresponse, mode, store);
 }
Example #34
0
        /// <summary>
        /// Abstract method to handle token requests.
        /// </summary>
        /// <param name="request">Abstracted HTTP request object.</param>
        /// <param name="response">Abstracted HTTP response object.</param>
        /// <param name="mode">Token request mode.</param>
        /// <param name="store">Token storage provider.</param>
        static void HandleHttpTokenRequest(AbstractRequest request, AbstractResponse response, ServerRequestMode mode, IServerTokenStore store)
        {
            StreamWriter sw = new StreamWriter(response.OutputStream);
            NameValueCollection nvc = null;
            nvc = DecodeRequest(request);
            if (nvc == null) 
            {
                response.StatusCode = 400;
                sw.Write("Unsupported HTTP request method");
                sw.Dispose();
                return;
            }

            TokenProcessingResult result = HandleTokenRequest(mode, request.Url, request.HttpMethod, nvc, store);
            if (!result.Success)
            {
                switch (result.FailGenericCondition)
                {
                    case FailureGenericType.BadRequest:
                        response.StatusCode = 400;
                        break;
                    case FailureGenericType.Unauthorized:
                        response.StatusCode = 401;
                        break;
                }
                sw.Write(result.FailReason);
                sw.Dispose();
                return;
            }

            sw.Write(OAuthUtility.ArgsToVal(result.ResponseArguments, AuthenticationMethod.Post));
            sw.Dispose();
        }