Example #1
0
 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));
     }
 }
Example #2
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);
            }
        }
Example #5
0
        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);
            }
        }
Example #6
0
        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("退出--实时解析遥控包线程");
        }