示例#1
0
        internal static Func <Ccf.Ck.Models.DirectCall.InputModel, Task <Ccf.Ck.Models.DirectCall.ReturnModel> > ExecutionDelegateDirect(IApplicationBuilder builder, KraftGlobalConfigurationSettings kraftGlobalConfigurationSettings)
        {
            Func <Ccf.Ck.Models.DirectCall.InputModel, Task <Ccf.Ck.Models.DirectCall.ReturnModel> > directDelegate = (inputModel) =>
            {
                var transactionScope      = new TransactionScopeContext(builder.ApplicationServices.GetService <IServiceCollection>());
                var nodesSetService       = builder.ApplicationServices.GetService <INodeSetService>();
                var kraftModuleCollection = builder.ApplicationServices.GetService <KraftModuleCollection>();
                Models.DirectCall.ReturnModel returnModel = null;
                DirectCallHandler             dcHandler   = new DirectCallHandler(inputModel, kraftModuleCollection, nodesSetService);
                IProcessingContextCollection  processingContextCollection = dcHandler.GenerateProcessingContexts(kraftGlobalConfigurationSettings, null);
                foreach (IProcessingContext processingContext in processingContextCollection.ProcessingContexts)
                {
                    dcHandler.Execute(processingContext, transactionScope);
                    returnModel = new Models.DirectCall.ReturnModel
                    {
                        Data         = processingContext.ReturnModel.Data,
                        BinaryData   = processingContext.ReturnModel.BinaryData,
                        IsSuccessful = processingContext.ReturnModel.Status.IsSuccessful
                    };
                    return(Task.FromResult(returnModel));
                }
                return(Task.FromResult(returnModel));
            };

            return(directDelegate);
        }
示例#2
0
        public async Task ExecuteAsync()
        {
            AbstractProcessorFactory     processorFactory   = new KraftProcessorFactory();
            IProcessorHandler            processor          = processorFactory.CreateProcessor(_HttpContext, _KraftModuleCollection, _NodesSetService);
            IProcessingContextCollection processingContexts = processor.GenerateProcessingContexts(_ServiceProvider.GetService <KraftGlobalConfigurationSettings>(), _KraftGlobalConfigurationSettings.GeneralSettings.KraftRequestFlagsKey);

            if (processingContexts == null)
            {
                Utilities.ExtensionMethods.KraftResult(_HttpContext, HttpStatusCode.InternalServerError, $"ExecuteAsync.CreateProcessingContexts returned null.");
                return;
            }

            Task[] tasks = new Task[processingContexts.Length];
            int    i     = 0;

            try
            {
                _IsSystemInMaintenanceMode = processingContexts.IsMaintenance;

                foreach (IProcessingContext processingContext in processingContexts.ProcessingContexts)
                {
                    tasks[i++] = Task.Run(() => {
                        ExecuteReEntrance(processingContext, processingContexts.IsMaintenance);
                    });
                }
                await Task.WhenAll(tasks);
            }
            finally
            {
                _IsSystemInMaintenanceMode = false;
                processor.GenerateResponse();
            }
        }
示例#3
0
        internal void ExecuteSignals(string module, string signal)
        {
            INodeSetService       nodeSetService        = _ServiceProvider.GetService <INodeSetService>();
            KraftModuleCollection kraftModuleCollection = _ServiceProvider.GetService <KraftModuleCollection>();

            DefaultHttpContext httpContext = new DefaultHttpContext();

            httpContext.Request.Method = "GET";
            RouteData routeData = new RouteData();

            routeData.Values.Add(Constants.RouteSegmentConstants.RouteModule, module);
            routeData.Values.Add(Constants.RouteSegmentConstants.RouteModuleSignalParameter, signal);
            routeData.DataTokens.Add("key", Constants.RouteSegmentConstants.RouteDataTokenSignalRead);

            httpContext.Features[typeof(IRoutingFeature)] = new RoutingFeature()
            {
                RouteData = routeData,
            };

            ProcessorSignal processorSignal = new ProcessorSignal(httpContext, kraftModuleCollection, ESupportedContentTypes.JSON, nodeSetService);
            IProcessingContextCollection processingContextCollection = processorSignal.GenerateProcessingContexts(_KraftGlobalConfigurationSettings, string.Empty, new SecurityModelMock(_KraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection));
            RequestExecutor requestExecutor = new RequestExecutor(_ServiceProvider, httpContext, _KraftGlobalConfigurationSettings);

            foreach (IProcessingContext processingContext in processingContextCollection.ProcessingContexts)
            {
                requestExecutor.ExecuteReEntrance(processingContext);
            }
        }
        public async Task ExecuteAsync()
        {
            //REQUESTRECORDER
            if (_KraftGlobalConfigurationSettings.GeneralSettings.ToolsSettings.RequestRecorder.IsEnabled)
            {
                ISecurityModel securityModel;
                if (_KraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection.RequireAuthorization)
                {
                    securityModel = new SecurityModel(_HttpContext);
                }
                else
                {
                    securityModel = new SecurityModelMock(_KraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection);
                }
                if (securityModel.IsAuthenticated)
                {
                    RecordersStoreImp recordersStoreImp = _HttpContext.RequestServices.GetRequiredService <RecordersStoreImp>();
                    IRequestRecorder  requestRecorder   = recordersStoreImp.Get(securityModel.UserName);
                    if (requestRecorder != null && requestRecorder.IsRunning)
                    {
                        await requestRecorder.HandleRequest(_HttpContext.Request);
                    }
                }
            }

            AbstractProcessorFactory     processorFactory   = new KraftProcessorFactory();
            IProcessorHandler            processor          = processorFactory.CreateProcessor(_HttpContext, _KraftModuleCollection, _NodesSetService, _ServiceProvider.GetService <KraftGlobalConfigurationSettings>());
            IProcessingContextCollection processingContexts = processor.GenerateProcessingContexts(_KraftGlobalConfigurationSettings.GeneralSettings.KraftRequestFlagsKey);

            if (processingContexts == null)
            {
                Utilities.ExtensionMethods.KraftResult(_HttpContext, HttpStatusCode.InternalServerError, $"ExecuteAsync.CreateProcessingContexts returned null.");
                return;
            }


            Task[] tasks = new Task[processingContexts.Length];
            int    i     = 0;

            try
            {
                _IsSystemInMaintenanceMode = processingContexts.IsMaintenance;

                foreach (IProcessingContext processingContext in processingContexts.ProcessingContexts)
                {
                    tasks[i++] = Task.Run(() =>
                    {
                        ExecuteReEntrance(processingContext, processingContexts.IsMaintenance);
                    });
                }
                await Task.WhenAll(tasks);
            }
            finally
            {
                _IsSystemInMaintenanceMode = false;
                processor.GenerateResponse();
            }
        }
示例#5
0
 public ProcessorBase(HttpContext httpContext, KraftModuleCollection kraftModuleCollection, ESupportedContentTypes requestContentType)
 {
     _KraftModuleCollection       = kraftModuleCollection;
     _HttpContext                 = httpContext;
     _RequestMethod               = (ERequestMethod)Enum.Parse(typeof(ERequestMethod), httpContext.Request.Method);
     _RequestContentType          = requestContentType;
     _ProcessingContextCollection = new ProcessingContextCollection(new List <IProcessingContext>());
     //AntiforgeryService
     //KeyValuePair<string, string> cookie = httpContext.Request.Cookies.FirstOrDefault(c => c.Key.Contains("XSRF-TOKEN"));
     //if (cookie.Value != null)
     //{
     //    httpContext.Request.Headers.Add("RequestVerificationToken", new StringValues(cookie.Value));
     //}
 }
 public XmlPacketResponseBuilder(IProcessingContextCollection processingContextCollection)
 {
     _ProcessingContextCollection = processingContextCollection;
 }