public virtual Task StartAsync(ExamItemExecutionContext context, CancellationToken token) { return(Task.Run(() => { ActivedRules = GetActiveRules(context); RegisterMessages(Messenger); StartCore(context, token); }, token)); }
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); }
//这里面有通过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); }
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; }
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)); }
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)); }
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()); }
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)); }
protected override void StartCore(ExamItemExecutionContext context, CancellationToken token) { Logger.InfoFormat("起步开始"); base.StartCore(context, token); }