/// <summary>
        /// UploadSrgsFile HTTP post handler
        /// </summary>
        /// <param name="postData"></param>
        /// <param name="post"></param>
        /// <returns></returns>
        private IEnumerator <ITask> UploadSrgsFileHttpPostHandler(HttpPostRequestData postData, HttpPost post)
        {
            string mountPointFileLocation = postData.Parameters["MountPointSaveLocation"];

            if (string.IsNullOrEmpty(mountPointFileLocation))
            {
                PostHttpPostParameterError(post, "No mount point save location was specified");
                yield break;
            }

            HttpPostFile file = postData.Files["SrgsFile"];

            if (file == null)
            {
                PostHttpPostParameterError(post, "No SRGS file uploaded");
                yield break;
            }

            // Write file to mount service
            SuccessFailurePort writerResponsePort = new SuccessFailurePort();

            yield return(new IterativeTask(delegate
            {
                return WriteFileToMountService(
                    mountPointFileLocation,
                    file.InputStream,
                    writerResponsePort
                    );
            }));

            Exception writeException = (Exception)writerResponsePort;

            if (writeException != null)
            {
                LogWarning(writeException);
                post.ResponsePort.Post(new HttpResponseType(
                                           HttpStatusCode.BadRequest,
                                           Fault.FromException(writeException)
                                           ));
                yield break;
            }

            // Use newly uploaded file
            NameValueCollection parameters = new NameValueCollection();

            parameters["SrgsFileLocation"] = mountPointFileLocation;
            yield return(new IterativeTask(delegate
            {
                return UseExistingSrgsFileHttpPostHandler(
                    parameters,
                    post
                    );
            }));

            // UseExistingSrgsFileHttpPostHandler already took care of posting
            // a result on the response port
            yield break;
        }
예제 #2
0
        public IEnumerator <ITask> HttpPostHandler(HttpPost post)
        {
            HttpPostRequestData request    = post.GetHeader <HttpPostRequestData>();
            NameValueCollection collection = null;


            if (request == null)
            {
                LogError("No form data available with HttpPost");
            }
            else
            {
                collection = request.Parameters;

                string location = collection["Location"];

                if (location != null)
                {
                    _state.CameraImageLocation = new Uri(location);
                    yield return(Arbiter.Choice(
                                     SaveState(_state),
                                     delegate(DefaultReplaceResponseType success) { },
                                     delegate(Fault fault)
                    {
                        LogError(null, "Unable to save state", fault);
                    }
                                     ));
                }
            }

            yield return(new IterativeTask <HttpListenerContext, PortSet <HttpResponseType, Fault> >(
                             post.Body.Context,
                             post.ResponsePort,
                             HttpHandler
                             ));
        }
예제 #3
0
        public void HttpPostHandler(HttpPost httpPost)
        {
            HttpPostRequestData formData = httpPost.GetHeader <HttpPostRequestData>();

            try
            {
                DsspOperation operation = formData.TranslatedOperation;

                if (operation is DriveDistance)
                {
                    _mainPort.Post((DriveDistance)operation);
                }
                else if (operation is SetDrivePower)
                {
                    _mainPort.Post((SetDrivePower)operation);
                }
                else if (operation is RotateDegrees)
                {
                    _mainPort.Post((RotateDegrees)operation);
                }
                else if (operation is EnableDrive)
                {
                    _mainPort.Post((EnableDrive)operation);
                }
                else if (operation is AllStop)
                {
                    _mainPort.Post((AllStop)operation);
                }
                else if (operation is ResetEncoders)
                {
                    _mainPort.Post((ResetEncoders)operation);
                }
                else
                {
                    NameValueCollection parameters = formData.Parameters;

                    if (parameters["StartDashboard"] != null)
                    {
                        string          Dashboardcontract = "http://schemas.microsoft.com/robotics/2006/01/simpledashboard.user.html";
                        ServiceInfoType info   = new ServiceInfoType(Dashboardcontract);
                        cons.Create     create = new cons.Create(info);
                        create.TimeSpan = DsspOperation.DefaultShortTimeSpan;

                        ConstructorPort.Post(create);
                        Activate(Arbiter.Choice(
                                     create.ResponsePort,
                                     delegate(CreateResponse createResponse) { },
                                     delegate(Fault f) { LogError(f); }
                                     ));
                    }
                    else if (parameters["DrivePower"] != null)
                    {
                        double power = double.Parse(parameters["Power"]);
                        SetDrivePowerRequest drivepower = new SetDrivePowerRequest();
                        drivepower.LeftWheelPower  = power;
                        drivepower.RightWheelPower = power;
                        _mainPort.Post(new SetDrivePower(drivepower));
                    }
                    else
                    {
                        throw new InvalidOperationException();
                    }
                }
                HttpPostSuccess(httpPost);
            }
            catch
            {
                HttpPostFailure(httpPost);
            }
        }
        public IEnumerator <ITask> HttpPostHandler(HttpPost post)
        {
            // Use helper to read form data
            ReadAllFormData readForm = new ReadAllFormData(post);

            _httpUtilities.Post(readForm);

            yield return((Choice)readForm.ResultPort);

            Exception exception = (Exception)readForm.ResultPort;

            if (exception != null)
            {
                LogError(exception);
                post.ResponsePort.Post(new HttpResponseType(
                                           HttpStatusCode.OK,
                                           Fault.FromException(exception)
                                           ));
                yield break;
            }

            HttpPostRequestData postData   = (HttpPostRequestData)readForm.ResultPort;
            NameValueCollection parameters = postData.Parameters;
            string cmd = parameters["cmd"];

            if (cmd != null)
            {
                cmd = cmd.ToLowerInvariant();
                switch (cmd)
                {
                case "savedictionary":
                    yield return(new IterativeTask(
                                     delegate
                    {
                        return SaveDictionaryHttpPostHandler(parameters, post);
                    }
                                     ));

                    yield break;

                case "uploadsrgsfile":
                    yield return(new IterativeTask(
                                     delegate
                    {
                        return UploadSrgsFileHttpPostHandler(postData, post);
                    }
                                     ));

                    yield break;

                case "useexistingsrgsfile":
                    yield return(new IterativeTask(
                                     delegate
                    {
                        return UseExistingSrgsFileHttpPostHandler(parameters, post);
                    }
                                     ));

                    yield break;
                }
            }

            PostHttpPostParameterError(post, "Unknown post command");
            yield break;
        }