コード例 #1
0
        public async Task <object> HandleFr8Request(string curTerminal, string curActionPath, Fr8DataDTO curDataDTO)
        {
            if (curDataDTO == null)
            {
                throw new ArgumentNullException(nameof(curDataDTO));
            }
            if (curDataDTO.ActivityDTO == null)
            {
                throw new ArgumentException(nameof(curDataDTO.ActivityDTO) + " is null");
            }
            if (curDataDTO.ActivityDTO.ActivityTemplate == null)
            {
                throw new ArgumentException(nameof(curDataDTO.ActivityDTO.ActivityTemplate) + " is null");
            }


            ActivityContext activityContext = DeserializeRequest(curDataDTO);

            //we should remove this mode
            var activityTemplate = curDataDTO.ActivityDTO.ActivityTemplate;
            IActivityFactory factory;


            if (activityTemplate.Name.EndsWith("_TEST"))
            {
                var originalName = activityTemplate.Name;

                _hubCommunicator      = new TestMonitoringHubCommunicator(curDataDTO.ExplicitData);
                activityTemplate.Name = activityTemplate.Name.Substring(0, activityTemplate.Name.Length - "_TEST".Length);

                factory = ActivityStore.GetValue(activityTemplate);

                activityTemplate.Name = originalName;
            }
            else
            {
                factory = ActivityStore.GetValue(curDataDTO.ActivityDTO.ActivityTemplate);
            }


            if (factory == null)
            {
                throw new ArgumentException($"Activity template registration for [Name = '{curDataDTO.ActivityDTO.ActivityTemplate.Name}', Version = '{curDataDTO.ActivityDTO.ActivityTemplate.Version}']  not found");
            }

            var activity = factory.Create();

            _hubCommunicator.Configure(curTerminal, activityContext.UserId);

            activityContext.HubCommunicator = _hubCommunicator;

            ContainerExecutionContext executionContext;

            switch (curActionPath.ToLower())
            {
            case "configure":
                await activity.Configure(activityContext);

                return(SerializeResponse(activityContext));

            case "activate":
                await activity.Activate(activityContext);

                return(SerializeResponse(activityContext));

            case "deactivate":
                await activity.Deactivate(activityContext);

                return(SerializeResponse(activityContext));

            case "run":
                executionContext = await CreateContainerExecutionContext(curDataDTO);

                await activity.Run(activityContext, executionContext);

                return(SerializeResponse(executionContext));

            case "executechildactivities":
                executionContext = await CreateContainerExecutionContext(curDataDTO);

                await activity.RunChildActivities(activityContext, executionContext);

                return(SerializeResponse(executionContext));

            case "documentation":
                var documentation = await activity.GetDocumentation(activityContext, curDataDTO.ActivityDTO.Documentation);

                return(SerializeResponse(documentation));
            }

            throw new ArgumentException("Unsupported request: " + curActionPath);
        }