public static IEnumerable <CompositeRootCommandResponse> SendRequest(WebRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            return(SendRequest(request, new CompositeRootCommandRequest[] { CompositeRootCommandRequest.Create(1, request.RequestUri.AbsolutePath.Trim('/', '\\')) }));
        }
Пример #2
0
        public object ReceiveRequest()
        {
            var commandResponses = new List <CompositeRootCommandResponse>();
            CompositeRootHttpContext compositeRootHttpContext         = null;
            IEnumerable <CompositeRootCommandRequest> commandRequests = null;
            IEnumerable <CompositeUploadedFile>       uploadedFiles   = null;
            var requestId = 0L;

            try
            {
                Authenticate(HttpContext);

                var request = Request.QueryString.HasValue ? Request.QueryString.Value : string.Empty;

                var    requestParts = request.Split('?');
                string requestBody  = requestParts.Length >= 3 ? requestParts[2] : null;
                if (requestBody == null && Request.ContentLength.HasValue)
                {
                    requestBody = Request.Body.GetRequest(Encoding.UTF8, Request.ContentType, string.Empty, CultureInfo.CurrentCulture, out uploadedFiles, out commandRequests);
                }

                var   pathAndQuery   = $"{Regex.Replace(Request.Path.Value, @"\0$", "%00")}{(string.IsNullOrEmpty(Request.QueryString.Value) && !string.IsNullOrEmpty(requestBody) ? (!requestBody.StartsWith("?") ? "?" : string.Empty) + requestBody : Request.QueryString.Value)}";
                var   controllerName = ControllerContext.ActionDescriptor.ControllerName;
                var   requestPattern = $"^/{controllerName}/?(?'compositeRootId'[0-9]+)?/?";
                Match compositeRootIdMatch;
                var   compositeRootId = 0L;
                if ((compositeRootIdMatch = Regex.Match(pathAndQuery, requestPattern, RegexOptions.IgnoreCase)).Success)
                {
                    var compositeRoootIdValue = compositeRootIdMatch.Groups["compositeRootId"].Value;
                    compositeRootId = string.IsNullOrEmpty(compositeRoootIdValue) ? 0 : long.Parse(compositeRoootIdValue);
                }

                commandRequests ??= new CompositeRootCommandRequest[]
                {
                    CompositeRootCommandRequest.Create(1, Regex.Replace(pathAndQuery, requestPattern, string.Empty))
                };

                compositeRootHttpContext = GetContext(requestBody, uploadedFiles);

                var compositeRoot = CreateCompositeRoot();
                var compositeRootModelFieldName = compositeRoot.GetType().GetCustomAttribute <CompositeModelAttribute>()?.ModelFieldName;
                var compositeRootModelField     = compositeRoot.GetType().GetField(compositeRootModelFieldName, BindingFlags.Instance | BindingFlags.NonPublic);
                var compositeRootModelFieldType = compositeRootModelField.FieldType;

                var compositeRootModelJson = GetCache(compositeRootId);
                if (!string.IsNullOrWhiteSpace(compositeRootModelJson))
                {
                    var compositeRootModel = JsonConvert.DeserializeObject(compositeRootModelJson, compositeRootModelFieldType);
                    compositeRootModel.RestoreParentReferences();
                    compositeRoot.InitializeCompositeModel(compositeRootModel);
                }
                else
                {
                    if (compositeRootId == 0)
                    {
                        SetCache(compositeRoot.Id, JsonConvert.SerializeObject(compositeRootModelField.GetValue(compositeRoot)));
                    }
                    else
                    {
                        throw new UnauthorizedAccessException();
                    }
                }

                requestId = requestId.NewId();
                var objectState = OnBeforeExecute(commandRequests, compositeRootHttpContext, uploadedFiles, requestId);
                commandResponses = compositeRoot.Execute(commandRequests, compositeRootHttpContext, uploadedFiles).ToList();
                OnAfterExecute(commandResponses, compositeRootHttpContext, requestId, objectState);

                SetCache(compositeRoot.Id, JsonConvert.SerializeObject(compositeRootModelField.GetValue(compositeRoot)));

                if (commandResponses.First().ReturnValue is byte[] bytes)
                {
                    return(File
                           (
                               bytes,
                               compositeRootHttpContext.Response.ContentType
                           ));
                }
                else
                {
                    Response.ContentType = "application/json";
                    return(commandResponses);
                }
            }
            catch (Exception e)
            {
                OnError(e, commandRequests, compositeRootHttpContext, uploadedFiles, requestId);
                commandResponses.Add(new CompositeRootCommandResponse {
                    Success = false, Errors = GetErrorMessages(e)
                });
                return(commandResponses);
            }
        }
        public void MyTest()
        {
            var blogServerMonitorHelpResponse = CompositeRootHttpServerTester.SendRequest(_blogServerMonitorConfiguration, "?", _blogServerMonitorConnection.SessionToken);

            //var request = CompositeRootHttpServerTester.CreateRequest(_blogServerMonitorConfiguration, "~/test.txt", _blogServerMonitorConnection.SessionToken);
            #region
            //var fq = CompositeRootHttpServerTester.CreateRequest(_configuration, "~/test.txt", _connection.SessionToken);
            ////fq.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip");
            //fq.AddRange(-3);
            //fq.AddRange(6, 7);
            //fq.AddRange(-1);
            //fq.AddRange(0, 7);

            //fq.AddRange(100, 200);

            //var r1 = CompositeRootHostHttpServerTester.SendRequest(fq);

            //var tt = Execute("NullableInt");


            //var connection = _tester.LogOnUser(_configuration, "username=&password="******"Message$", new ManualResetEvent(false));

            //var tempFilePath1 = Path.GetTempFileName();
            //File.WriteAllText(tempFilePath1, "test1");

            //var tempFilePath2 = Path.GetTempFileName();
            //File.WriteAllText(tempFilePath2, "test2");

            //var e = CompositeRootHttpServerTester.SendRequest(_configuration, "?", connection.SessionToken);
            //var x = CompositeRootHttpServerTester.SendRequest(_configuration, "FrameContainer/?", connection.SessionToken);


            //var request = CompositeRootHttpServerTester.CreateRequest(_configuration, "Start?pa=123&pa=456&testLevel=Middle&testDateTime=06/13/1974&testTimeSpan=00:00:05&testInt=420&testBool=true&testString=&testDecimal=3.1415&testChar=%65", connection.SessionToken);

            //var blag = CompositeRootHttpServerTester.SendRequest(request, new FileInfo[] { new FileInfo(tempFilePath1), new FileInfo(tempFilePath2) });

            //connection.WaitForEvent(@"Message$");

            //var bwqwflkg = CompositeRootHttpServerTester.SendRequest(_configuration, "", connection.SessionToken);


            //var bwlkg = CompositeRootHttpServerTester.SendRequest(_configuration, "", connection.SessionToken);

            //var ergt = CompositeRootHttpServerTester.SendRequest(_configuration, "FrameContainer/Frames/0/ParticleContainer/Particles/0/Y?3.14", connection.SessionToken);


            int id       = 1;
            var commands = new CompositeRootCommandRequest[]
            {
                CompositeRootCommandRequest.Create(id++, "ConfigurationSettings"),
                CompositeRootCommandRequest.Create(id++, "Start?pa=123&pa=456&testLevel=&testDateTime=06/13/1974&testTimeSpan=00:00:05&testInt=420&testBool=true&testString=%00&testDecimal=3.1415&testChar=%65"),
                CompositeRootCommandRequest.Create(id++, "NullableInt"),
                CompositeRootCommandRequest.Create(id++, "NullableInt?{1/ParticleCount}"),
                CompositeRootCommandRequest.Create(id++, "NullableInt"),
                CompositeRootCommandRequest.Create(id++, "Start?pa={1/ParticleCount}&pa=456&testLevel=&testDateTime=06/13/1974&testTimeSpan=00:00:05&testInt=420&testBool=true&testString=%00&testDecimal=3.1415&testChar=%65")
            };


            //request = CompositeRootHttpServerTester.CreateRequest(_configuration, connection.SessionToken);
            //var r2 = CompositeRootHttpServerTester.SendRequest(request, commands);


            //var responses = CompositeRootHttpServerTester.SendRequest(_configuration, commands, connection.SessionToken);

            //var z = CompositeRootHttpServerTester.CreateRequest(_configuration, "FrameContainer/Frames/[EAE5CF8C-81D4-4519-813E-D915925A75FE]", connection.SessionToken);
            //var tt = CompositeRootHttpServerTester.SendRequest(z);

            //var t = CompositeRootHttpServerTester.SendRequest(_configuration, "FrameContainer/Frames/99999", connection.SessionToken);

            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "FrameContainer/Frames/0/ParticleContainer/Particles/0", connection.SessionToken);

            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "FrameContainer/Frames/0/ParticleContainer/Particles/[Particle30619839]", connection.SessionToken);

            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "FrameContainer/Frames/[50125c6b-d26f-4415-8d34-82a34d37f1a9]", connection.SessionToken);

            //var r = CompositeRootHttpServerTester.SendRequest(_configuration, "CreateBlob", connection.SessionToken);


            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "?", connection.SessionToken);


            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "NullableInt", connection.SessionToken);

            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "NullableInt?25", connection.SessionToken);

            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "NullableInt", connection.SessionToken);
            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "NullableInt?", connection.SessionToken);
            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "NullableInt", connection.SessionToken);

            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "Level", connection.SessionToken);

            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "Level?Middle", connection.SessionToken);
            ////        public void Start(CompositeRootHostHttpContext context, SimulatorLevel testLevel, DateTime testDateTime, TimeSpan testTimeSpan, int testInt, bool testBool, string testString, decimal testDecimal, char testChar)
            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "Level", connection.SessionToken);


            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "Name?matt", connection.SessionToken);
            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "Name", connection.SessionToken);
            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "Name?", connection.SessionToken);


            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "Name", connection.SessionToken);

            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "Name?%00", connection.SessionToken);
            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "Name", connection.SessionToken);


            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "Configuration/FrameCount/?", connection.SessionToken);

            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "Configuration/FrameCount?25", connection.SessionToken);

            //t = CompositeRootHttpServerTester.SendRequest(_configuration, "Configuration/FrameCount", connection.SessionToken);
            #endregion
        }
 public static IEnumerable <CompositeRootCommandResponse> SendRequest(CompositeRootConfiguration configuration, string command, string sessionToken)
 {
     return(SendRequest(configuration, new CompositeRootCommandRequest[] { CompositeRootCommandRequest.Create(1, command) }, sessionToken));
 }