Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="requestObj"></param>
        /// <param name="injectFilePath"></param>
        public void SendLocalFileToClient(RequestObj requestObj, InstructionParams parameters)
        {
            if (requestObj == null)
            {
                throw new ProxyWarningException("Request object is invalid");
            }

            if (parameters == null)
            {
                throw new ProxyWarningException("Parameters object is invalid");
            }

            string injectFilePath = parameters.Data;

            if (string.IsNullOrEmpty(injectFilePath))
            {
                throw new ProxyWarningException("Inject file is invalid");
            }

            byte[] fileData       = File.ReadAllBytes(injectFilePath);
            string redirectHeader = Header.SendFile.GetHeader(injectFilePath, fileData.Count(), requestObj.ClientRequestObj.RequestLine.NewlineString);

            byte[] redirectDataByteArray = Encoding.UTF8.GetBytes(redirectHeader);

            this.tcpClientConnection.SendToClient(redirectDataByteArray, requestObj.ClientRequestObj.ClientBinaryWriter);
            this.tcpClientConnection.SendToClient(fileData, requestObj.ClientRequestObj.ClientBinaryWriter);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="PluginInstruction"/> class.
 ///
 /// </summary>
 public PluginInstruction()
 {
     this.Instruction                       = Instruction.DoNothing;
     this.InstructionParameters             = new InstructionParams();
     this.InstructionParameters.Url         = string.Empty;
     this.InstructionParameters.Status      = string.Empty;
     this.InstructionParameters.Data        = string.Empty;
     this.InstructionParameters.HttpHeaders = new List <string>();
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="PluginInstruction"/> class.
        ///
        /// </summary>
        /// <param name="instruction"></param>
        /// <param name="url"></param>
        /// <param name="status"></param>
        /// <param name="data"></param>
        /// <param name="httpHeaders"></param>
        public PluginInstruction(Instruction instruction, string url, string status, string data, List <string> httpHeaders)
        {
            this.Instruction           = instruction;
            this.InstructionParameters = new InstructionParams();

            this.InstructionParameters.Url         = url;
            this.InstructionParameters.Status      = status;
            this.InstructionParameters.Data        = data;
            this.InstructionParameters.HttpHeaders = httpHeaders;
        }
Example #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="requestObj"></param>
        /// <param name="redirectUrl"></param>
        public void Redirect(RequestObj requestObj, InstructionParams parameters)
        {
            if (requestObj == null)
            {
                throw new ProxyWarningException("Request object is invalid");
            }

            if (string.IsNullOrEmpty(parameters.Data))
            {
                throw new ProxyWarningException("Redirect URL is invalid");
            }

            string redirectData = Header.Redirect.GetHeader(parameters.Status, parameters.StatusDescription, parameters.Data, requestObj.ClientRequestObj.RequestLine.NewlineString);

            byte[] redirectDataByteArray = Encoding.UTF8.GetBytes(redirectData);
            this.tcpClientConnection.SendToClient(redirectDataByteArray, requestObj.ClientRequestObj.ClientBinaryWriter);
        }
        public JsonResult ProcessInstructions(InstructionParams obj)
        {
            try
            {
                var processLocation = new ProcessLocation();

                var robot = processLocation.Parse(obj.InitialPositionX, obj.InitialPositionY, obj.InitialDirection);

                IEnumerable <IMove> robotMoves = ProcessMoves.Parse(obj.MovingInstructions);

                int totalPenalty = 0;

                foreach (var item in robotMoves)
                {
                    item.ExecuteOn(robot, out int penalty);

                    if (penalty > 0)
                    {
                        totalPenalty++;
                    }
                }

                var result = new ProcessOutput
                {
                    EndPositionX = robot.Coordinate.X.ToString(),
                    EndPositionY = robot.Coordinate.Y.ToString(),
                    EndDirection = robot.Direction.ToString(),
                    Penalties    = totalPenalty.ToString()
                };

                return(Json(result, JsonRequestBehavior.AllowGet));
            }
            catch (System.Exception ex)
            {
                return(Json(null, JsonRequestBehavior.AllowGet));
            }
        }