Esempio n. 1
0
 public virtual Task StartAsync(ExamItemExecutionContext context, CancellationToken token)
 {
     return(Task.Run(() =>
     {
         ActivedRules = GetActiveRules(context);
         RegisterMessages(Messenger);
         StartCore(context, token);
     }, token));
 }
Esempio n. 2
0
        public virtual string GetRandomGroup(ExamItemExecutionContext context)
        {
            //var num = (new Random()).Next(0, Groups.Length * 1000);
            //var index = num % Groups.Length;
            //return Groups.ElementAt(index)

            Logger.InfoFormat("模拟灯光:随机分组开始");
            var randomName = GetRandomLightGroup();

            Logger.InfoFormat("模拟灯光:随机分组结束:分组:{0}", randomName);
            return(randomName);
        }
Esempio n. 3
0
        //这里面有通过join 查询出来,其实我也可以不通过 join 去查询得出IRule
        //这里就直接通过一个联合查询查出来这个对象,不通过反射进行创建
        //Singleton 、、

        protected LightRule[] GetActiveRulesNew(ExamItemExecutionContext context)
        {
            var dataService = Singleton.GetDataService;

            var query = from a in dataService.AllLightExamItems.First(x => x.GroupName == context.ExamGroup).LightRules.Split(',')
                        let b = Convert.ToInt32(a)
                                join c in  dataService.AllLightRules on b equals c.Id
                                select(LightRule) c;

            var rules = query.ToArray();

            return(rules);
        }
Esempio n. 4
0
        protected virtual void StartCore(ExamItemExecutionContext context, CancellationToken token)
        {
            IsEndStartCore = false;
            Logger.DebugFormat("启动项目:{0}", this.Name);
            Context   = context;
            StartTime = DateTime.Now;
            State     = ExamItemState.Progressing;
            try
            {
                var currentSignal = CarSignalSet.Current;
                TriggerPoint = context.TriggerPoint;
                if (currentSignal != null)
                {
                    StartDistance = currentSignal.Distance;
                    StartAngle    = currentSignal.BearingAngle;
                    Logger.DebugFormat("Current 考试项目:{0} 里程 :{1}", this.Name, StartDistance);
                }
                else
                {
                    Logger.Debug("CurrentSignal is null");
                }
            }
            catch (Exception ex)
            {
                Logger.Error("StartCore", ex.Message);
            }
            if (StartDistance == 0)
            {
                StartDistance = StaticClass.StaticDistance;
                StartAngle    = StaticClass.StaticAngle;
                Logger.DebugFormat("Static考试项目:{0} 里程 :{1}", this.Name, StartDistance);
            }
            //综合评判开始项目没有语音播报
            if (ItemCode != ExamItemCodes.CommonExamItem)
            {
                if (VoiceFile.Trim() == "滴")
                {
                    Speaker.SpeakBreakeVoice();
                }
                else
                {
                    Speaker.PlayAudioAsync(VoiceFile, SpeechPriority.High);
                }

                Logger.Debug(VoiceFile, "Playuccess");
            }

            IsEndStartCore = true;
        }
Esempio n. 5
0
        protected Task <IExamItem> StartExamItemAutoAsync(ExamContext context, string itemCode)
        {
            var itemContext = new ExamItemExecutionContext(context);

            itemContext.ItemCode = itemCode;

            itemContext.TriggerSource = ExamItemTriggerSource.Auto;
            var examItem = DataService.AllExamItems.First(x => x.ItemCode == itemCode);

            if (SignalSet.Current != null)
            {
                itemContext.TriggerPoint = new MapPoint(SignalSet.Current.Gps.ToPoint(), -1, examItem.ItemName, examItem.MapPointType);
            }
            Logger.DebugFormat("自动启动项目:{0}-{1}", examItem.ItemName, itemCode);
            return(ExamManager.StartItemAsync(itemContext, CancellationToken.None));
        }
Esempio n. 6
0
        public override async Task StartAsync(ExamContext context)
        {
            var signalSet = Singleton.GetCarSignalSet;

            signalSet.Clear();
            var executionContext = new ExamItemExecutionContext(context);

            executionContext.ItemCode = ExamItemCodes.Light;
            Speaker.CancelAllAsync();
            TokenSource = new CancellationTokenSource();
            if (LightExamItem == null)
            {
                LightExamItem = (ILightExamItem)Singleton.GetProviderFactory.CreateExamItem(ExamItemCodes.Light);
            }
            await LightExamItem.StartAsync(executionContext, TokenSource.Token);
        }
 public override Task StartAsync(ExamItemExecutionContext context, CancellationToken token)
 {
     return(Task.Run(() =>
     {
         Logger.DebugFormat("模拟灯光:考试开始: {0}", context.ExamGroup);
         if (string.IsNullOrEmpty(context.ExamGroup))
         {
             context.ExamGroup = GetRandomGroup(context);
         }
         ActivedRules = GetActiveRules(context);
         ClearBrokenRuleState();
         ResetRules();
         //RegisterMessages(Messenger);
         currentLightRuleIndex = 0;
         SetCurrentLightRule(0);
         StartCore(context, token);
         Logger.Debug("StartCore");
     }, token));
 }
Esempio n. 8
0
        protected virtual IRule[] GetActiveRules(ExamItemExecutionContext context)
        {
            if (Rules == null)
            {
                return(new IRule[0]);
            }

            IEnumerable <IRule> query = Rules;

            //分组过滤
            if (!string.IsNullOrEmpty(context.ExamGroup))
            {
                query = Rules.Where(x => string.IsNullOrEmpty(x.Group) || x.Group == context.ExamGroup);
            }

            //匹配夜间、白天模式
            var isNight = context.ExamTimeMode == ExamTimeMode.Night;

            query = query.Where(x => x.TimeMode == RuleTimeMode.Both ||
                                isNight == (x.TimeMode == RuleTimeMode.Night));
            return(query.ToArray());
        }
Esempio n. 9
0
        public Task <IExamItem> StartExamItemManualAsync(ExamContext context, string itemCode, string parameters = null)
        {
            Logger.DebugFormat("启动考试项目:{0}", itemCode);
            var itemContext = new ExamItemExecutionContext(context);

            itemContext.ItemCode      = itemCode;
            itemContext.TriggerSource = ExamItemTriggerSource.Manual;
            var examItem = DataService.AllExamItems.First(x => x.ItemCode == itemCode);

            if (SignalSet.Current != null)
            {
                itemContext.TriggerPoint = new MapPoint(SignalSet.Current.Gps.ToPoint(), -1, examItem.ItemName, examItem.MapPointType);
            }
            if (!string.IsNullOrEmpty(parameters))
            {
                var query = from a in parameters.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
                            let b = a.Split(":".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
                                    select new
                {
                    key   = b[0],
                    value = b[1]
                };

                if (itemContext.Properties == null)
                {
                    itemContext.Properties = new Dictionary <string, object>();
                }

                foreach (var pair in query)
                {
                    itemContext.Properties[pair.key] = pair.value;
                }
            }
            Logger.DebugFormat("启动考试项目-2:{0}", examItem.ItemName);
            return(ExamManager.StartItemAsync(itemContext, CancellationToken.None));
        }
Esempio n. 10
0
 protected override void StartCore(ExamItemExecutionContext context, CancellationToken token)
 {
     Logger.InfoFormat("起步开始");
     base.StartCore(context, token);
 }