public override void Render(GenContext ctx)
        {
            ctx.Tasks.Add(Task.Run(() =>
            {
                GenArgs args          = ctx.GenArgs;
                var brightRequirePath = args.TypescriptBrightRequirePath;
                var brightPackageName = args.TypescriptBrightPackageName;
                var render            = ctx.Render;
                var ass         = ctx.Assembly;
                var fileContent = new List <string>();
                if (args.TypescriptUsePuertsByteBuf)
                {
                    fileContent.Add(TypescriptStringTemplate.PuertsByteBufImports);
                }
                else
                {
                    fileContent.Add(TypescriptStringTemplate.GetByteBufImports(brightRequirePath, brightPackageName));
                }
                if (args.TypescriptEmbedBrightTypes)
                {
                    fileContent.Add(StringTemplateManager.Ins.GetTemplateString("config/typescript_bin/vectors"));
                    fileContent.Add(TypescriptStringTemplate.SerializeTypes);
                    fileContent.Add(TypescriptStringTemplate.ProtoTypes);
                }
                else
                {
                    fileContent.Add(TypescriptStringTemplate.GetSerializeImports(brightRequirePath, brightPackageName));
                    fileContent.Add(TypescriptStringTemplate.GetProtocolImports(brightRequirePath, brightPackageName));
                    fileContent.Add(TypescriptStringTemplate.GetVectorImports(brightRequirePath, brightPackageName));
                }

                fileContent.Add(@$ "export namespace {ass.TopModule} {{");

                foreach (var type in ctx.ExportTypes)
                {
                    fileContent.Add(render.RenderAny(type));
                }

                fileContent.Add(render.RenderStubs("ProtocolStub", ass.TopModule,
                                                   ctx.ExportTypes.Where(t => t is DefProto).Cast <DefProto>().ToList(),
                                                   ctx.ExportTypes.Where(t => t is DefRpc).Cast <DefRpc>().ToList()));

                fileContent.Add("}"); // end of topmodule

                var content = FileHeaderUtil.ConcatAutoGenerationHeader(string.Join('\n', fileContent), ELanguage.TYPESCRIPT);
                var file    = "Types.ts";
                var md5     = CacheFileUtil.GenMd5AndAddCache(file, content);
                ctx.GenCodeFilesInOutputCodeDir.Add(new FileInfo()
                {
                    FilePath = file, MD5 = md5
                });
            }));
        }
        public void Load(Defines defines, RemoteAgent agent, GenArgs args)
        {
            LoadCommon(defines, agent, args);

            foreach (var e in defines.Enums)
            {
                AddType(new DefEnum(e));
            }

            foreach (var b in defines.Beans)
            {
                AddType(new DefBean(b));
            }

            foreach (var p in defines.Protos)
            {
                AddType(new DefProto(p));
            }
            foreach (var r in defines.Rpcs)
            {
                AddType(new DefRpc(r));
            }

            foreach (var type in Types.Values)
            {
                type.AssemblyBase = this;
            }

            foreach (var type in Types.Values)
            {
                try
                {
                    s_logger.Trace("precompile type:{0} begin", type.FullName);
                    type.PreCompile();
                    s_logger.Trace("precompile type:{0} end", type.FullName);
                }
                catch (Exception)
                {
                    agent.Error("precompile type:{0} error", type.FullName);
                    throw;
                }
            }
            foreach (var type in Types.Values)
            {
                try
                {
                    s_logger.Trace("compile type:{0} begin", type.FullName);
                    type.Compile();
                    s_logger.Trace("compile type:{0} end", type.FullName);
                }
                catch (Exception)
                {
                    agent.Error("compile type:{0} error", type.FullName);
                    s_logger.Error("compile type:{0} error", type.FullName);
                    throw;
                }
            }
            foreach (var type in Types.Values)
            {
                try
                {
                    s_logger.Trace("post compile type:{0} begin", type.FullName);
                    type.PostCompile();
                    s_logger.Trace("post compile type:{0} end", type.FullName);
                }
                catch (Exception)
                {
                    agent.Error("post compile type:{0} error", type.FullName);
                    s_logger.Error("post compile type:{0} error", type.FullName);
                    throw;
                }
            }
        }