IEnumerator WorkLoop() { while (queue != null) { while (queue.Count > 0) { var data = queue.Dequeue(); var tBlockAll = 0f; //Debug.LogFormat("DataDrivenViewHub:{0}", data); handlers.ForEach(data.GetType(), (view, handle) => { var tBlock = 0f; try { tBlock = handle(data); } catch (Exception ex) { Debug.LogErrorFormat("ViewData {1} @ {0} : {2}", view, data, ex); } if (tBlock > tBlockAll) { tBlockAll = tBlock; } }); if (tBlockAll > 0) { //Debug.LogFormat("DataDrivenViewHub:{0}s", tBlockAll); yield return(new WaitForSeconds(tBlockAll)); } } yield return(new WaitForSeconds(0)); } }
public byte[] RecvData() { if (DataQueue.Count > 0) { return((byte[])DataQueue.Dequeue()); } return(null); }
/// <summary> /// 生成实体类文件 /// </summary> public override void GenerateFiles() { //获取实体类模板内容 string templateContent = Tools.ReadFileContent(Configs.EntityTemplatePath); //数据表总数 int tableCount = DataQueue.Count(); Console.WriteLine($"共有{tableCount}个实体类类文件待生成:"); //处理数据表转换队列 while (DataQueue.Count() > 0) { var table = (TableDesc)DataQueue.Dequeue(); Console.WriteLine($"正在生成【实体类】{table.Description}({table.Name})……{tableCount - DataQueue.Count()}/{tableCount}"); //实体类解析对象上下文 EntityClassResolveContext context = new EntityClassResolveContext(templateContent, table); //解析器集合 List <EntityClassExpression> exps = new List <EntityClassExpression>(); exps.Add(new ModuleNameExpression()); //模块名称文法解释器 exps.Add(new EntityNameExpression()); //实体名称文法解释器 exps.Add(new EntityDescriptionExpression()); //实体类描述文法解释器 exps.Add(new ForEachPropertiesExpression()); //实体属性循环处理文法解释器 exps.Add(new ForeachPrimaryKeysExpression()); //实体主键处理方法解释器 //循环执行解析 foreach (var exp in exps) { exp.Interpret(context); } //存储的最终文件路径 string filePath = $@"{OutputDirectory}\{context.TableDesc.Module}\{context.TableDesc.Name}.cs"; //写入文件并保存 SaveFile(filePath, context.OutputEntityClassContent); } }
/// <summary> /// 生成实体类文件 /// </summary> public override void GenerateFiles() { //获取Mapping类模板内容 string templateContent = Tools.ReadFileContent(Configs.MappingTemplatePath); //数据表总数 int tableCount = DataQueue.Count(); Console.WriteLine($"共有{tableCount}个Mapping类待生成:"); //处理数据表转换队列 while (DataQueue.Count() > 0) { var table = (TableDesc)DataQueue.Dequeue(); Console.WriteLine($"正在生成【Mapping类】{table.Description}({table.Name})……{tableCount - DataQueue.Count()}/{tableCount}"); //Mapping类解析对象上下文 MappingResolveContext context = new MappingResolveContext(templateContent, table); //解析器集合 List <MappingExpression> exps = new List <MappingExpression>(); exps.Add(new ModuleNameExpression()); //模块名称文法解释器 exps.Add(new MappingNameExpression()); //Mapping名称文法解释器 exps.Add(new TableSchemaExpression()); //Mapping类数据表架构(Schema)文法解释器 exps.Add(new MappingHasKeysExpression()); //Mapping主键配置处理文法解释器 exps.Add(new MappingColumnsExpression()); //Mapping字段配置处理文法解释器 //循环执行解析 foreach (var exp in exps) { exp.Interpret(context); } //存储的最终文件路径 string filePath = $@"{OutputDirectory}\{context.Table.Module}\{context.Table.Name}Mapping.cs"; //写入文件并保存 SaveFile(filePath, context.Output); } }
public override void GenerateFiles() { //获取枚举类模板内容 string templateContent = Tools.ReadFileContent(Configs.EnumTemplatePath); //枚举总数 int enumCount = DataQueue.Count(); Console.WriteLine($"共有{enumCount}个枚举类文件待生成:"); //处理数据表转换队列 while (DataQueue.Count() > 0) { var enumDesc = (EnumDesc)DataQueue.Dequeue(); Console.WriteLine($"正在生成【枚举类】{enumDesc.Description}({enumDesc.Name})……{enumCount - DataQueue.Count()}/{enumCount}"); //枚举类解析对象上下文 EnumClassResolveContext context = new EnumClassResolveContext(templateContent, enumDesc); //解析器集合 List <EnumClassExpression> exps = new List <EnumClassExpression>(); exps.Add(new EnumModuleNameExpression()); //模块名称文法解释器 exps.Add(new EnumNameExpression()); //实体名称文法解释器 exps.Add(new EnumDescriptionExpression()); //实体类描述文法解释器 exps.Add(new ForeachOptionsExpression()); //实体属性循环处理文法解释器 //循环执行解析 foreach (var exp in exps) { exp.Interpret(context); } //存储的最终文件路径 string filePath = $@"{OutputDirectory}\{context.EnumDesc.Module}\{context.EnumDesc.Name}.cs"; //写入文件并保存 SaveFile(filePath, context.OutputEnumClassContent); } }
private void FunRealTime(int chan) { Trace.WriteLine("进入--实时解析遥控包线程" + chan.ToString() + "通道"); Queue <byte[]> DataQueue; switch (chan) { case 0: DataQueue = Data.DataQueue3; break; case 1: DataQueue = Data.DataQueue1; break; case 2: DataQueue = Data.DataQueue2; break; case 99: DataQueue = DataQueue_Review; break; default: DataQueue = Data.DataQueue1; break; } byte[] TwoMPDU = new byte[2048]; while (RealTimeTag) { if (DataQueue.Count > 0) { Trace.WriteLine(DataQueue.Count); if (TempMPDU.MPDU1_Used == false) { TempMPDU.MPDU1_Used = true; byte[] temp = DataQueue.Dequeue(); Array.Copy(temp, 18, TempMPDU.MPDU_Head1, 0, 2); Array.Copy(temp, 20, TempMPDU.MPDU_Body1, 0, 1002); String BeiYong1 = Convert.ToString(TempMPDU.MPDU_Head1[0], 2).PadLeft(8, '0').Substring(0, 5); if (BeiYong1 == "00000") { TempMPDU.GetMUDU_Pointer1(); if (TempMPDU.Pointer1 == "11111111110") { //全是填充数据 EmptyMPDU += 1; TempMPDU.MPDU1_Used = false; } if (TempMPDU.Pointer1 == "11111111111") { // WrongMPDU += 1; TempMPDU.MPDU1_Used = false; } if (TempMPDU.Pointer1Value > 1001) { WrongMPDU += 1; TempMPDU.MPDU1_Used = false; } } else { WrongMPDU += 1; TempMPDU.MPDU1_Used = false; } } else if (TempMPDU.MPDU2_Used == false) { TempMPDU.MPDU2_Used = true; byte[] temp = DataQueue.Dequeue(); Array.Copy(temp, 18, TempMPDU.MPDU_Head2, 0, 2); Array.Copy(temp, 20, TempMPDU.MPDU_Body2, 0, 1002); String BeiYong2 = Convert.ToString(TempMPDU.MPDU_Head2[0], 2).PadLeft(8, '0').Substring(0, 5); if (BeiYong2 == "00000") { TempMPDU.GetMUDU_Pointer2(); if (TempMPDU.Pointer2 == "11111111110") { //全是填充数据 EmptyMPDU += 1; TempMPDU.MPDU2_Used = false; } if (TempMPDU.Pointer2 == "11111111111") { //全是填充数据 WrongMPDU += 1; TempMPDU.MPDU2_Used = false; } if (TempMPDU.Pointer2Value > 1001) { WrongMPDU += 1; TempMPDU.MPDU2_Used = false; } } else { WrongMPDU += 1; TempMPDU.MPDU2_Used = false; } } else { // Trace.WriteLine("MPDU两次正确,进入处理"); } if (TempMPDU.MPDU1_Used && TempMPDU.MPDU2_Used) { TempMPDU.GetMUDU_Pointer1(); if (TempMPDU.Pointer1 == "00000000000") //第一个字节就是源包数据 { RightMPDU += 1; Array.Copy(TempMPDU.MPDU_Body1, 0, TempMPDU.Temp_EPDUS, 0, 1002); TempMPDU.Temp_EPDUS_Count += 1002; } else { int Pointer_addr = Convert.ToInt32(TempMPDU.Pointer1, 2); Array.Copy(TempMPDU.MPDU_Body1, Pointer_addr, TempMPDU.Temp_EPDUS, 0, 1002 - Pointer_addr); TempMPDU.Temp_EPDUS_Count = 1002 - Pointer_addr; } TempMPDU.GetMUDU_Pointer2(); if (TempMPDU.Pointer2 == "00000000000") //第一个字节就是源包数据 { } else { int Pointer_addr = Convert.ToInt32(TempMPDU.Pointer2, 2); Array.Copy(TempMPDU.MPDU_Body2, 0, TempMPDU.Temp_EPDUS, TempMPDU.Temp_EPDUS_Count, Pointer_addr); TempMPDU.Temp_EPDUS_Count += Pointer_addr; } byte[] Deal_TwoMPDU = new byte[TempMPDU.Temp_EPDUS_Count]; Array.Copy(TempMPDU.Temp_EPDUS, Deal_TwoMPDU, TempMPDU.Temp_EPDUS_Count); DealWith_Temp_MPDUS(Deal_TwoMPDU); //将MPDU2给到MPDU1,清空Temp_EPDUS Array.Copy(TempMPDU.MPDU_Head2, TempMPDU.MPDU_Head1, 2); Array.Copy(TempMPDU.MPDU_Body2, TempMPDU.MPDU_Body1, 1002); TempMPDU.MPDU1_Used = true; TempMPDU.MPDU2_Used = false; TempMPDU.Temp_EPDUS_Count = 0; for (int i = 0; i < 2048; i++) { TempMPDU.Temp_EPDUS[i] = 0; } } } } Trace.WriteLine("退出--实时解析遥控包线程"); }