Exemple #1
0
        private void BtnSave_Click(object sender, EventArgs e)
        {
            try
            {
                this.BoosterService.SaveValidation();
                var serviceConfig = new ServiceConfig();
                if (!string.IsNullOrEmpty(this.BoosterService.Id))
                {
                    serviceConfig = this.MapleConfig.ServiceData.First(x => x.Guid == this.BoosterService.Id);
                }
                else
                {
                    serviceConfig.Guid = Guid.NewGuid().ToString();
                }

                serviceConfig.ServiceTypeId      = this.BoosterService.ServiceTypeId;
                serviceConfig.ServicePolicy      = this.BoosterService.ServicePolicy;
                serviceConfig.ServiceName        = this.BoosterService.ServiceName;
                serviceConfig.ServiceGroup       = this.BoosterService.ServiceGroup;
                serviceConfig.ServiceDescription = this.BoosterService.ServiceDescription;
                serviceConfig.Operations         = JsonConvert.SerializeObject(this.BoosterService.Operations.ToList());

                if (string.IsNullOrEmpty(this.BoosterService.Id))
                {
                    this.MapleConfig.ServiceData.Add(serviceConfig);
                }

                //序列化成ServiceObject保存起来
                this.MapleConfig.Save();
                this.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }
Exemple #2
0
        private void StartAllService()
        {
            LockAllControl(!Start);
            Task.Run(() =>
            {
                this.LogTxt($"----开始并行执行任务,任务数量:{this.MapleConfig.ServiceData.Where(x => x.IsRun).Count()}个----", EnumColor.Blue);
                Parallel.ForEach(this.MapleConfig.ServiceData.Where(x => x.IsRun), new Action <ServiceConfig>(t =>
                {
                    ServiceConfig config = t;
                    Queue <ServiceConfig> queueService = new Queue <ServiceConfig>();
                    AbstractBoosterService runService  = null;
                    do
                    {
                        if (queueService.Count > 0)
                        {
                            config = queueService.Dequeue();
                        }

                        this.LogTxt($"初始化服务规则:“{config.ServiceDescription}”,请稍后。");
                        runService        = ServiceBuilder.ReBuildService(config, true);
                        var runOperations = runService.Operations;

                        var operations = runOperations.GroupBy(x => x.OperateTarget).OrderBy(x => x.Key);
                        this.LogTxt($"初始化任务:“{config.ServiceDescription}”完成,有{operations.Count()}个操作进行。策略:{runService.ServicePolicy}");
                        try
                        {
                            this.LogStatus(runService.ServiceDescription);
                            //分别循环 1,2,3 个方框内服务。
                            foreach (var item in operations)
                            {
                                do
                                {
                                    foreach (var operation in item.SelectMany(x => x.Operations))
                                    {
                                        operation.HandleOperationMethod(runService, (m, p) =>
                                        {
                                            operation.ExeuteOperationMethod(runService, m, p);
                                        });

                                        int i = 0;
                                        while (Stop && Start)
                                        {
                                            if (i == 0)
                                            {
                                                this.LogTxt($"{runService.ServiceDescription}已经暂停,请停止或恢复暂停。", EnumColor.Red);
                                            }
                                            Thread.Sleep(100);
                                            i++;
                                        }
                                    }
                                } while (runService.ServicePolicy == ServicePolicyEnum.Loop && item.Key == "1" && Start);
                            }
                            //遍历循环已经结束
                            this.LogTxt($"{runService.ServiceDescription}已经执行完毕,继续执行下一个服务。", EnumColor.Blue);
                            if (runService.AnotherOperations != null && runService.AnotherOperations.Count > 0)
                            {
                                foreach (var item in runService.AnotherOperations)
                                {
                                    queueService.Enqueue(this.MapleConfig.ServiceData.First(x => x.Guid == item));
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            this.LogTxt($"异常终止了服务,{runService.ServiceDescription},错误信息{ex.Message}", EnumColor.Red);
                            runService = null;
                        }
                        if (!Start)
                        {
                            queueService.Clear();
                            break;
                        }
                    } while (queueService.Count > 0);
                }));
            });
        }