Ejemplo n.º 1
0
        protected ActionResult AjaxRedirectToRoute(RouteEnum route, object routeValues, bool updateBodyOnly = false)
        {
            if (IsJsonRequest())
            {
                return(Json(new JsonResponse(updateBodyOnly ? ResponseCode.RedirectToBody : ResponseCode.Ok)
                {
                    RedirectUrl = Url.RouteUrl(route.ToString(), routeValues)
                }, JsonRequestBehavior.AllowGet));
            }

            return(RedirectToRoute(route.ToString(), routeValues));
        }
        public override void Start()
        {
            if (Running)
            {
                return;
            }

            log.InfoFormat("Starting {0}", GetTypeName());

            base.Start();

            server = new RemoteControlServer(this.ApiBindAddress, this.ApiAccessPort);
            server.RequestReceived += (object sender, RequestReceivedEventArgs e) => {
                if (e.Context.Request.Url.AbsolutePath == "/api/v1/test")
                {
                    server.SendResponseJson(200,
                                            new InfoResponse()
                    {
                        name = "BlinkStick Client", version = ApplicationDataModel.ApplicationVersion, versionFull = ApplicationDataModel.ApplicationFullVersion
                    },
                                            e.Context.Response);
                    e.Handled = true;
                }

                RouteEnum route = RouteEnum.Unrecognized;

                Match m = SetColorRegex.Match(e.Context.Request.Url.AbsolutePath);

                if (m.Success)
                {
                    route = RouteEnum.SetColor;
                }
                else
                {
                    m = PatternRegex.Match(e.Context.Request.Url.AbsolutePath);

                    if (m.Success)
                    {
                        route = RouteEnum.PlayPattern;
                    }
                }

                BlinkStickDeviceSettings ledSettings = null;
                if (route != RouteEnum.Unrecognized)
                {
                    String serial = m.Groups[1].ToString();

                    ledSettings = DataModel.FindBySerial(serial);

                    if (ledSettings == null)
                    {
                        server.SendResponseJson(422, new ErrorResponse()
                        {
                            error = String.Format("BlinkStick with serial number {0} not found", serial)
                        }, e.Context.Response);
                        e.Handled = true;
                        return;
                    }
                    else if (ledSettings.Led == null)
                    {
                        server.SendResponseJson(422, new ErrorResponse()
                        {
                            error = String.Format("BlinkStick with serial number {0} not connected", serial)
                        }, e.Context.Response);
                        e.Handled = true;
                        return;
                    }
                }

                switch (route)
                {
                case RouteEnum.SetColor:
                    ProcessSetColorRequest(e, ledSettings);
                    break;

                case RouteEnum.PlayPattern:
                    ProcessPlayPatternRequest(e, ledSettings);
                    break;

                default:
                    break;
                }
            };
            server.Start();

            log.DebugFormat("{0} started", GetTypeName());
        }