diff --git a/docs/luban_command_tools.md b/docs/luban_command_tools.md index d88a370..4cb8c4a 100644 --- a/docs/luban_command_tools.md +++ b/docs/luban_command_tools.md @@ -50,6 +50,7 @@ Luban工具有两种部属方式。 -p, --port 可选参数。 监听端口 ,默认为8899。 -l, --loglevel 可选参数。 日志级别。默认为INFO。 有效值有: TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF -t, --template_search_path 可选参数。模板的额外搜索路径。优先从此路径,再从Templates目录搜索模板文件。 + --disable_cache 可选参数。禁用生成中间过程的缓存,但保留了源文件缓存。在模板调试时比较有用。 --i10n:default_timezone 可选参数。 datetime数据转换为UTC时间默认使用的时区。 ## luban-client 使用介绍 diff --git a/docs/start_up.md b/docs/start_up.md index c7ec510..bfa24e8 100644 --- a/docs/start_up.md +++ b/docs/start_up.md @@ -10,7 +10,7 @@ ## 创建游戏配置 -1. 从示例项目拷贝[MiniDesignerConfigsTemplate](https://github.com/focus-creative-games/luban_examples/MiniDesignerConfigsTemplate) 到一个合适的目录,假设为 **MyConfigs** +1. 从示例项目拷贝[MiniDesignerConfigsTemplate](https://github.com/focus-creative-games/luban_examples/tree/main/MiniDesignerConfigsTemplate) 到一个合适的目录,假设为 **MyConfigs** 2. 添加物品表 excel 文件 在 MyConfigs/Datas 目录下创建一个 “物品表.xlsx” 文件。 @@ -43,7 +43,7 @@ ## 生成代码和数据以及在程序中使用 - 假设是Unity项目,使用json导出格式。 示例参考项目为 [Csharp_Unity_Json](https://github.com/focus-creative-games/luban_examples/Projects/Csharp_Unity_json)。其他语言或者导出类型的组合,请参考 [luban_examples](https://github.com/focus-creative-games/luban_examples) + 假设是Unity项目,使用json导出格式。 示例参考项目为 [Csharp_Unity_Json](https://github.com/focus-creative-games/luban_examples/tree/main/Projects/Csharp_Unity_json)。其他语言或者导出类型的组合,请参考 [luban_examples](https://github.com/focus-creative-games/luban_examples) 1. 项目准备。 diff --git a/src/Luban.ClientServer/Program.cs b/src/Luban.ClientServer/Program.cs index 55a5666..e6b91ab 100644 --- a/src/Luban.ClientServer/Program.cs +++ b/src/Luban.ClientServer/Program.cs @@ -4,6 +4,8 @@ using Luban.Client.Common.Utils; using Luban.Client.Utils; using Luban.Common.Protos; using Luban.Common.Utils; +using Luban.Job.Cfg.Cache; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using Luban.Server; using System; @@ -165,11 +167,14 @@ Options: private static void StartServer(AllCommandLineOptions options) { + FileRecordCacheManager.Ins.Init(true); + StringTemplateManager.Ins.Init(true); if (!string.IsNullOrEmpty(options.TemplateSearchPath)) { - StringTemplateUtil.AddTemplateSearchPath(options.TemplateSearchPath); + StringTemplateManager.Ins.AddTemplateSearchPath(options.TemplateSearchPath); } - StringTemplateUtil.AddTemplateSearchPath(FileUtil.GetPathRelateApplicationDirectory("Templates")); + StringTemplateManager.Ins.AddTemplateSearchPath(FileUtil.GetPathRelateApplicationDirectory("Templates")); + GenServer.Ins.Start(true, options.Port, ProtocolStub.Factories); GenServer.Ins.RegisterJob("cfg", new Luban.Job.Cfg.JobController()); diff --git a/src/Luban.Job.Cfg/Source/Cache/FileRecordCacheManager.cs b/src/Luban.Job.Cfg/Source/Cache/FileRecordCacheManager.cs index ac7e567..6274ee4 100644 --- a/src/Luban.Job.Cfg/Source/Cache/FileRecordCacheManager.cs +++ b/src/Luban.Job.Cfg/Source/Cache/FileRecordCacheManager.cs @@ -11,7 +11,7 @@ namespace Luban.Job.Cfg.Cache /// 配置加载记录缓存。 /// 如果某个表对应的数据文件未修改,定义没变化,那加载后的数据应该是一样的。 /// - class FileRecordCacheManager + public class FileRecordCacheManager { private static readonly NLog.Logger s_logger = NLog.LogManager.GetCurrentClassLogger(); @@ -36,14 +36,21 @@ namespace Luban.Job.Cfg.Cache } } + public void Init(bool enableCache) + { + _enableCache = enableCache; + } + private readonly ConcurrentDictionary<(string TableName, string MD5, string SheetName), FileRecordCache> _caches = new(); private readonly object _shrinkLocker = new object(); + private bool _enableCache = true; + public bool TryGetCacheLoadedRecords(DefTable table, string md5, string originFile, string sheetName, out List cacheRecords) { cacheRecords = null; - if (!_caches.TryGetValue((table.FullName, md5, sheetName), out var r)) + if (!_enableCache || !_caches.TryGetValue((table.FullName, md5, sheetName), out var r)) { return false; } @@ -77,7 +84,7 @@ namespace Luban.Job.Cfg.Cache public bool TryGetRecordOutputData(DefTable table, List records, string dataType, out string md5) { - if (_tableCaches.TryGetValue((table.FullName, dataType), out var cacheInfo)) + if (_enableCache && _tableCaches.TryGetValue((table.FullName, dataType), out var cacheInfo)) { var cacheAss = cacheInfo.Table.Assembly; var curAss = table.Assembly; diff --git a/src/Luban.Job.Cfg/Source/Generate/CppCodeBinRender.cs b/src/Luban.Job.Cfg/Source/Generate/CppCodeBinRender.cs index 319700d..2f43c0d 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CppCodeBinRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CppCodeBinRender.cs @@ -3,6 +3,7 @@ using Luban.Job.Cfg.Defs; using Luban.Job.Common; using Luban.Job.Common.Defs; using Luban.Job.Common.Generate; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using System; using System.Collections.Generic; @@ -102,7 +103,7 @@ namespace {ctx.TopModule} private string RenderStub(string topModule, List types) { - var template = StringTemplateUtil.GetTemplate("config/cpp_bin/stub"); + var template = StringTemplateManager.Ins.GetTemplate("config/cpp_bin/stub"); return template.RenderCode(new { TopModule = topModule, Types = types, diff --git a/src/Luban.Job.Cfg/Source/Generate/LuaCodeBinRender.cs b/src/Luban.Job.Cfg/Source/Generate/LuaCodeBinRender.cs index 875a4c4..c402542 100644 --- a/src/Luban.Job.Cfg/Source/Generate/LuaCodeBinRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/LuaCodeBinRender.cs @@ -1,6 +1,7 @@ using Luban.Job.Cfg.Defs; using Luban.Job.Common.Defs; using Luban.Job.Common.Generate; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using Scriban; using System.Collections.Generic; @@ -18,9 +19,9 @@ namespace Luban.Job.Cfg.Generate var enums = types.Where(t => t is DefEnum).ToList(); var beans = types.Where(t => t is DefBean).ToList(); var tables = types.Where(t => t is DefTable).ToList(); - var template = StringTemplateUtil.GetOrAddTemplate("common/lua/base_all", fn => - Template.Parse(StringTemplateUtil.GetTemplateString("common/lua/base") - + StringTemplateUtil.GetTemplateString("config/lua_bin/all"))); + var template = StringTemplateManager.Ins.GetOrAddTemplate("common/lua/base_all", fn => + Template.Parse(StringTemplateManager.Ins.GetTemplateString("common/lua/base") + + StringTemplateManager.Ins.GetTemplateString("config/lua_bin/all"))); return template.RenderCode(new { Enums = enums, Beans = beans, Tables = tables }); } } diff --git a/src/Luban.Job.Cfg/Source/Generate/LuaCodeLuaRender.cs b/src/Luban.Job.Cfg/Source/Generate/LuaCodeLuaRender.cs index 3dd06be..019df9d 100644 --- a/src/Luban.Job.Cfg/Source/Generate/LuaCodeLuaRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/LuaCodeLuaRender.cs @@ -1,6 +1,7 @@ using Luban.Job.Cfg.Defs; using Luban.Job.Common.Defs; using Luban.Job.Common.Generate; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using Scriban; using System; @@ -22,8 +23,8 @@ namespace Luban.Job.Cfg.Generate var enums = types.Where(t => t is DefEnum).ToList(); var beans = types.Where(t => t is DefBean).ToList(); var tables = types.Where(t => t is DefTable).ToList(); - var template = t_allRender ??= Template.Parse(StringTemplateUtil.GetTemplateString("common/lua/base") - + StringTemplateUtil.GetTemplateString("config/lua_lua/all")); + var template = t_allRender ??= Template.Parse(StringTemplateManager.Ins.GetTemplateString("common/lua/base") + + StringTemplateManager.Ins.GetTemplateString("config/lua_lua/all")); return template.RenderCode(new { Enums = enums, Beans = beans, Tables = tables }); } } diff --git a/src/Luban.Job.Cfg/Source/Generate/Python3CodeJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/Python3CodeJsonRender.cs index 53b93c6..b1300c7 100644 --- a/src/Luban.Job.Cfg/Source/Generate/Python3CodeJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/Python3CodeJsonRender.cs @@ -1,5 +1,6 @@ using Luban.Job.Cfg.Defs; using Luban.Job.Common.Generate; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using System.Collections.Generic; @@ -24,7 +25,7 @@ namespace Luban.Job.Cfg.Generate { //fileContent.Add(PythonStringTemplates.ImportTython3Enum); //fileContent.Add(PythonStringTemplates.PythonVectorTypes); - fileContent.Add(StringTemplateUtil.GetTemplateString("config/python_json/include")); + fileContent.Add(StringTemplateManager.Ins.GetTemplateString("config/python_json/include")); } GenerateCodeMonolithic(ctx, RenderFileUtil.GetFileOrDefault(ctx.GenArgs.OutputCodeMonolithicFile, "Types.py"), lines, PreContent, null); diff --git a/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs index 46841e6..ad86ab6 100644 --- a/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs @@ -1,6 +1,7 @@ using Luban.Job.Cfg.Defs; using Luban.Job.Common.Defs; using Luban.Job.Common.Generate; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using System; using System.Collections.Generic; @@ -28,7 +29,7 @@ namespace Luban.Job.Cfg.Generate var lines = new List(); GenerateCodeMonolithic(ctx, RenderFileUtil.GetFileOrDefault(ctx.GenArgs.OutputCodeMonolithicFile, "mod.rs"), lines, ls => { - var template = StringTemplateUtil.GetTemplate("config/rust_json/include"); + var template = StringTemplateManager.Ins.GetTemplate("config/rust_json/include"); var result = template.RenderCode(ctx.ExportTypes); ls.Add(result); }, null); diff --git a/src/Luban.Job.Cfg/Source/Generate/TemplateCodeRenderBase.cs b/src/Luban.Job.Cfg/Source/Generate/TemplateCodeRenderBase.cs index 46c8c04..6ce72e1 100644 --- a/src/Luban.Job.Cfg/Source/Generate/TemplateCodeRenderBase.cs +++ b/src/Luban.Job.Cfg/Source/Generate/TemplateCodeRenderBase.cs @@ -1,5 +1,6 @@ using Luban.Job.Cfg.Defs; using Luban.Job.Common.Defs; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using System; using System.Collections.Generic; @@ -22,7 +23,7 @@ namespace Luban.Job.Cfg.Generate public override string Render(DefEnum e) { - var template = StringTemplateUtil.GetTemplate($"common/{CommonRenderTemplateDir}/enum"); + var template = StringTemplateManager.Ins.GetTemplate($"common/{CommonRenderTemplateDir}/enum"); var result = template.RenderCode(e); return result; @@ -30,21 +31,21 @@ namespace Luban.Job.Cfg.Generate public override string Render(DefBean b) { - var template = StringTemplateUtil.GetTemplate($"config/{RenderTemplateDir}/bean"); + var template = StringTemplateManager.Ins.GetTemplate($"config/{RenderTemplateDir}/bean"); var result = template.RenderCode(b); return result; } public override string Render(DefTable p) { - var template = StringTemplateUtil.GetTemplate($"config/{RenderTemplateDir}/table"); + var template = StringTemplateManager.Ins.GetTemplate($"config/{RenderTemplateDir}/table"); var result = template.RenderCode(p); return result; } public override string RenderService(string name, string module, List tables) { - var template = StringTemplateUtil.GetTemplate($"config/{RenderTemplateDir}/tables"); + var template = StringTemplateManager.Ins.GetTemplate($"config/{RenderTemplateDir}/tables"); var result = template.RenderCode(new { Name = name, Namespace = module, @@ -59,7 +60,7 @@ namespace Luban.Job.Cfg.Generate var beans = types.Where(t => t is DefBean).ToList(); var tables = types.Where(t => t is DefTable).ToList(); - var template = StringTemplateUtil.GetTemplate($"config/{RenderTemplateDir}/all"); + var template = StringTemplateManager.Ins.GetTemplate($"config/{RenderTemplateDir}/all"); var result = template.RenderCode(new { Namespace = DefAssembly.LocalAssebmly.TopModule, Enums = enums.Select(e => Render((DefEnum)e)).ToList(), diff --git a/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeRenderBase.cs b/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeRenderBase.cs index f05a33c..adda626 100644 --- a/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeRenderBase.cs +++ b/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeRenderBase.cs @@ -1,5 +1,6 @@ using Luban.Job.Cfg.Defs; using Luban.Job.Common.Defs; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using System; using System.Collections.Generic; @@ -39,8 +40,8 @@ namespace Luban.Job.Cfg.Generate if (args.TypescriptEmbedBrightTypes) { fileContent.Add(isGenBinary ? - StringTemplateUtil.GetTemplateString("config/typescript_bin/vectors") - : StringTemplateUtil.GetTemplateString("config/typescript_json/vectors")); + StringTemplateManager.Ins.GetTemplateString("config/typescript_bin/vectors") + : StringTemplateManager.Ins.GetTemplateString("config/typescript_json/vectors")); if (isGenBinary) { fileContent.Add(TypescriptStringTemplate.SerializeTypes); diff --git a/src/Luban.Job.Cfg/Source/Utils/DataExporterUtil.cs b/src/Luban.Job.Cfg/Source/Utils/DataExporterUtil.cs index dcc875b..8db19fe 100644 --- a/src/Luban.Job.Cfg/Source/Utils/DataExporterUtil.cs +++ b/src/Luban.Job.Cfg/Source/Utils/DataExporterUtil.cs @@ -7,6 +7,7 @@ using Luban.Job.Cfg.DataVisitors; using Luban.Job.Cfg.Defs; using Luban.Job.Cfg.l10n; using Luban.Job.Cfg.RawDefs; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using Scriban; using System; @@ -22,7 +23,7 @@ namespace Luban.Job.Cfg.Utils { public static string ToTemplateOutputData(DefTable table, List records, string templateName) { - Template template = StringTemplateUtil.GetTemplate($"config/data/{templateName}"); + Template template = StringTemplateManager.Ins.GetTemplate($"config/data/{templateName}"); return template.RenderData(table, records.Select(r => r.Data).ToList()); } diff --git a/src/Luban.Job.Common/Source/Tpl/StringTemplateManager.cs b/src/Luban.Job.Common/Source/Tpl/StringTemplateManager.cs new file mode 100644 index 0000000..e89271f --- /dev/null +++ b/src/Luban.Job.Common/Source/Tpl/StringTemplateManager.cs @@ -0,0 +1,99 @@ +using Scriban; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Luban.Job.Common.Tpl +{ + public class StringTemplateManager + { + public static StringTemplateManager Ins { get; } = new(); + + + private readonly List _templateSearchPaths = new(); + + private bool _enableTemplateCache; + + private readonly ConcurrentDictionary _templates = new(); + + private readonly ConcurrentDictionary _templateStrings = new(); + + public void Init(bool enableTemplateCache) + { + _enableTemplateCache = enableTemplateCache; + } + + public void AddTemplateSearchPath(string templateSearchPath) + { + _templateSearchPaths.Add(templateSearchPath); + } + + public bool TryGetTemplateString(string templateName, out string result) + { + if (_enableTemplateCache && _templateStrings.TryGetValue(templateName, out result)) + { + return true; + } + foreach (var searchPath in _templateSearchPaths) + { + var fullPath = $"{searchPath}/{templateName}.tpl"; + if (File.Exists(fullPath)) + { + result = File.ReadAllText(fullPath, Encoding.UTF8); + if (_enableTemplateCache) + { + _templateStrings[templateName] = result; + } + return true; + } + } + result = null; + return false; + } + + public string GetTemplateString(string templateName) + { + if (TryGetTemplateString(templateName, out var strTpl)) + { + return strTpl; + } + throw new FileNotFoundException($"can't find {templateName}.tpl in paths:{string.Join(';', _templateSearchPaths)}"); + } + + public Template GetTemplate(string templateName) + { + if (_enableTemplateCache) + { + return _templates.GetOrAdd(templateName, tn => Template.Parse(GetTemplateString(tn))); + } + else + { + return Template.Parse(GetTemplateString(templateName)); + } + } + + public bool TryGetTemplate(string templateName, out Template template) + { + if (_templates.TryGetValue(templateName, out template)) + { + return true; + } + if (TryGetTemplateString(templateName, out var strTpm)) + { + template = _templates.GetOrAdd(templateName, tn => Template.Parse(strTpm)); + return true; + } + template = null; + return false; + } + + public Template GetOrAddTemplate(string templateName, Func creator) + { + return _templates.GetOrAdd(templateName, creator); + } + } +} diff --git a/src/Luban.Job.Common/Source/Utils/RenderUtil.cs b/src/Luban.Job.Common/Source/Utils/RenderUtil.cs index 18fc24c..fff2c29 100644 --- a/src/Luban.Job.Common/Source/Utils/RenderUtil.cs +++ b/src/Luban.Job.Common/Source/Utils/RenderUtil.cs @@ -1,4 +1,5 @@ using Luban.Job.Common.Defs; +using Luban.Job.Common.Tpl; using Scriban; namespace Luban.Job.Common.Utils @@ -7,7 +8,7 @@ namespace Luban.Job.Common.Utils { public static string RenderCsEnumClass(DefEnum e) { - var template = StringTemplateUtil.GetTemplate("common/cs/enum"); + var template = StringTemplateManager.Ins.GetTemplate("common/cs/enum"); var result = template.Render(e); return result; @@ -15,7 +16,7 @@ namespace Luban.Job.Common.Utils public static string RenderJavaEnumClass(DefEnum e) { - var template = StringTemplateUtil.GetTemplate("common/java/enum"); + var template = StringTemplateManager.Ins.GetTemplate("common/java/enum"); var result = template.Render(e); return result; @@ -23,14 +24,14 @@ namespace Luban.Job.Common.Utils public static string RenderCppEnumClass(DefEnum e) { - var template = StringTemplateUtil.GetTemplate("common/cpp/enum"); + var template = StringTemplateManager.Ins.GetTemplate("common/cpp/enum"); var result = template.Render(e); return result; } public static string RenderPythonEnumClass(DefEnum e) { - var template = StringTemplateUtil.GetTemplate("common/python/enum"); + var template = StringTemplateManager.Ins.GetTemplate("common/python/enum"); var result = template.Render(e); return result; @@ -38,14 +39,14 @@ namespace Luban.Job.Common.Utils public static string RenderTypescriptEnumClass(DefEnum e) { - var template = StringTemplateUtil.GetTemplate("common/typescript/enum"); + var template = StringTemplateManager.Ins.GetTemplate("common/typescript/enum"); var result = template.Render(e); return result; } public static string RenderRustEnumClass(DefEnum e) { - var template = StringTemplateUtil.GetTemplate("common/rust/enum"); + var template = StringTemplateManager.Ins.GetTemplate("common/rust/enum"); var result = template.Render(e); return result; diff --git a/src/Luban.Job.Common/Source/Utils/StringTemplateUtil.cs b/src/Luban.Job.Common/Source/Utils/StringTemplateUtil.cs deleted file mode 100644 index 0d584de..0000000 --- a/src/Luban.Job.Common/Source/Utils/StringTemplateUtil.cs +++ /dev/null @@ -1,70 +0,0 @@ -using Scriban; -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.IO; -using System.Text; - -namespace Luban.Job.Common.Utils -{ - public static class StringTemplateUtil - { - private static List TemplateSearchPaths { get; } = new List(); - - public static void AddTemplateSearchPath(string path) - { - TemplateSearchPaths.Add(path); - } - - public static bool TryGetTemplateString(string templateName, out string result) - { - foreach (var searchPath in TemplateSearchPaths) - { - var fullPath = $"{searchPath}/{templateName}.tpl"; - if (File.Exists(fullPath)) - { - result = File.ReadAllText(fullPath, Encoding.UTF8); - return true; - } - } - result = null; - return false; - } - - public static string GetTemplateString(string templateName) - { - if (TryGetTemplateString(templateName, out var strTpl)) - { - return strTpl; - } - throw new FileNotFoundException($"can't find {templateName}.tpl in paths:{string.Join(';', TemplateSearchPaths)}"); - } - - private static readonly ConcurrentDictionary s_templates = new(); - - public static Template GetTemplate(string templateName) - { - return s_templates.GetOrAdd(templateName, tn => Template.Parse(GetTemplateString(tn))); - } - - public static bool TryGetTemplate(string templateName, out Template template) - { - if (s_templates.TryGetValue(templateName, out template)) - { - return true; - } - if (TryGetTemplateString(templateName, out var strTpm)) - { - template = s_templates.GetOrAdd(templateName, tn => Template.Parse(strTpm)); - return true; - } - template = null; - return false; - } - - public static Template GetOrAddTemplate(string templateName, Func creator) - { - return s_templates.GetOrAdd(templateName, creator); - } - } -} diff --git a/src/Luban.Job.Db/Source/Generate/AsyncCsRender.cs b/src/Luban.Job.Db/Source/Generate/AsyncCsRender.cs index 92cbc71..7371c63 100644 --- a/src/Luban.Job.Db/Source/Generate/AsyncCsRender.cs +++ b/src/Luban.Job.Db/Source/Generate/AsyncCsRender.cs @@ -1,4 +1,5 @@ using Luban.Job.Common.Defs; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using Luban.Job.Db.Defs; using System; @@ -26,14 +27,14 @@ namespace Luban.Job.Db.Generate public string Render(DefBean b) { - var template = StringTemplateUtil.GetTemplate("db/cs_async/bean"); + var template = StringTemplateManager.Ins.GetTemplate("db/cs_async/bean"); var result = template.RenderCode(b); return result; } public string Render(DefTable p) { - var template = StringTemplateUtil.GetTemplate("db/cs_async/table"); + var template = StringTemplateManager.Ins.GetTemplate("db/cs_async/table"); var result = template.RenderCode(p); return result; @@ -41,7 +42,7 @@ namespace Luban.Job.Db.Generate public string RenderTables(string name, string module, List tables) { - var template = StringTemplateUtil.GetTemplate("db/cs_async/tables"); + var template = StringTemplateManager.Ins.GetTemplate("db/cs_async/tables"); var result = template.Render(new { Name = name, diff --git a/src/Luban.Job.Db/Source/Generate/SyncCsRender.cs b/src/Luban.Job.Db/Source/Generate/SyncCsRender.cs index 0bb7872..92e018f 100644 --- a/src/Luban.Job.Db/Source/Generate/SyncCsRender.cs +++ b/src/Luban.Job.Db/Source/Generate/SyncCsRender.cs @@ -1,4 +1,5 @@ using Luban.Job.Common.Defs; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using Luban.Job.Db.Defs; using System; @@ -26,14 +27,14 @@ namespace Luban.Job.Db.Generate public string Render(DefBean b) { - var template = StringTemplateUtil.GetTemplate("db/cs_sync/bean"); + var template = StringTemplateManager.Ins.GetTemplate("db/cs_sync/bean"); var result = template.RenderCode(b); return result; } public string Render(DefTable p) { - var template = StringTemplateUtil.GetTemplate("db/cs_sync/table"); + var template = StringTemplateManager.Ins.GetTemplate("db/cs_sync/table"); var result = template.RenderCode(p); return result; @@ -41,7 +42,7 @@ namespace Luban.Job.Db.Generate public string RenderTables(string name, string module, List tables) { - var template = StringTemplateUtil.GetTemplate("db/cs_sync/tables"); + var template = StringTemplateManager.Ins.GetTemplate("db/cs_sync/tables"); var result = template.Render(new { Name = name, diff --git a/src/Luban.Job.Db/Source/Generate/TypescriptRender.cs b/src/Luban.Job.Db/Source/Generate/TypescriptRender.cs index e79fef8..d3441b7 100644 --- a/src/Luban.Job.Db/Source/Generate/TypescriptRender.cs +++ b/src/Luban.Job.Db/Source/Generate/TypescriptRender.cs @@ -1,4 +1,5 @@ using Luban.Job.Common.Defs; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using Luban.Job.Db.Defs; using System; @@ -26,14 +27,14 @@ namespace Luban.Job.Db.Generate public string Render(DefBean b) { - var template = StringTemplateUtil.GetTemplate("db/typescript/bean"); + var template = StringTemplateManager.Ins.GetTemplate("db/typescript/bean"); var result = template.RenderCode(b); return result; } public string Render(DefTable p) { - var template = StringTemplateUtil.GetTemplate("db/typescript/table"); + var template = StringTemplateManager.Ins.GetTemplate("db/typescript/table"); var result = template.RenderCode(p); return result; @@ -41,7 +42,7 @@ namespace Luban.Job.Db.Generate public string RenderTables(string name, string module, List tables) { - var template = StringTemplateUtil.GetTemplate("db/typescript/tables"); + var template = StringTemplateManager.Ins.GetTemplate("db/typescript/tables"); var result = template.Render(new { Name = name, diff --git a/src/Luban.Job.Proto/Source/Generate/LuaRender.cs b/src/Luban.Job.Proto/Source/Generate/LuaRender.cs index fbe2c0b..25a3404 100644 --- a/src/Luban.Job.Proto/Source/Generate/LuaRender.cs +++ b/src/Luban.Job.Proto/Source/Generate/LuaRender.cs @@ -1,6 +1,7 @@ using Luban.Common.Protos; using Luban.Job.Common.Defs; using Luban.Job.Common.Generate; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using Luban.Job.Proto.Defs; using System.Collections.Generic; @@ -30,7 +31,7 @@ namespace Luban.Job.Proto.Generate var beans = types.Where(t => t is DefBean).ToList(); var protos = types.Where(t => t is DefProto).ToList(); var rpcs = types.Where(t => t is DefRpc).ToList(); - var template = StringTemplateUtil.GetTemplate("proto/lua/all"); + var template = StringTemplateManager.Ins.GetTemplate("proto/lua/all"); return template.RenderCode(new { Enums = enums, Beans = beans, Protos = protos, Rpcs = rpcs }); } diff --git a/src/Luban.Job.Proto/Source/Generate/TemplateRenderBase.cs b/src/Luban.Job.Proto/Source/Generate/TemplateRenderBase.cs index 15df6ce..2c01505 100644 --- a/src/Luban.Job.Proto/Source/Generate/TemplateRenderBase.cs +++ b/src/Luban.Job.Proto/Source/Generate/TemplateRenderBase.cs @@ -1,5 +1,6 @@ using Luban.Job.Common.Defs; using Luban.Job.Common.Generate; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using Luban.Job.Proto.Defs; using System; @@ -16,35 +17,35 @@ namespace Luban.Job.Proto.Generate protected override string Render(DefEnum e) { - var template = StringTemplateUtil.GetTemplate($"common/{RenderTemplateDir}/enum"); + var template = StringTemplateManager.Ins.GetTemplate($"common/{RenderTemplateDir}/enum"); var result = template.RenderCode(e); return result; } protected override string Render(DefBean b) { - var template = StringTemplateUtil.GetTemplate($"proto/{RenderTemplateDir}/bean"); + var template = StringTemplateManager.Ins.GetTemplate($"proto/{RenderTemplateDir}/bean"); var result = template.RenderCode(b); return result; } protected override string Render(DefProto p) { - var template = StringTemplateUtil.GetTemplate($"proto/{RenderTemplateDir}/proto"); + var template = StringTemplateManager.Ins.GetTemplate($"proto/{RenderTemplateDir}/proto"); var result = template.RenderCode(p); return result; } protected override string Render(DefRpc r) { - var template = StringTemplateUtil.GetTemplate($"proto/{RenderTemplateDir}/rpc"); + var template = StringTemplateManager.Ins.GetTemplate($"proto/{RenderTemplateDir}/rpc"); var result = template.RenderCode(r); return result; } public override string RenderStubs(string name, string module, List protos, List rpcs) { - var template = StringTemplateUtil.GetTemplate($"proto/{RenderTemplateDir}/stub"); + var template = StringTemplateManager.Ins.GetTemplate($"proto/{RenderTemplateDir}/stub"); var result = template.Render(new { Name = name, diff --git a/src/Luban.Job.Proto/Source/Generate/TypescriptRender.cs b/src/Luban.Job.Proto/Source/Generate/TypescriptRender.cs index 9e58ab5..7a22bdd 100644 --- a/src/Luban.Job.Proto/Source/Generate/TypescriptRender.cs +++ b/src/Luban.Job.Proto/Source/Generate/TypescriptRender.cs @@ -2,6 +2,7 @@ using Luban.Job.Common; using Luban.Job.Common.Defs; using Luban.Job.Common.Generate; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using Luban.Job.Proto.Defs; using System; @@ -34,7 +35,7 @@ namespace Luban.Job.Proto.Generate } if (args.TypescriptEmbedBrightTypes) { - fileContent.Add(StringTemplateUtil.GetTemplateString("config/typescript_bin/vectors")); + fileContent.Add(StringTemplateManager.Ins.GetTemplateString("config/typescript_bin/vectors")); fileContent.Add(TypescriptStringTemplate.SerializeTypes); fileContent.Add(TypescriptStringTemplate.ProtoTypes); } diff --git a/src/Luban.Server/Properties/launchSettings.json b/src/Luban.Server/Properties/launchSettings.json index f5ddc6e..d3886f7 100644 --- a/src/Luban.Server/Properties/launchSettings.json +++ b/src/Luban.Server/Properties/launchSettings.json @@ -10,6 +10,10 @@ "timezone-utc": { "commandName": "Project", "commandLineArgs": "--timezone \"Etc/UTC\"" + }, + "TestTemplate-DisableCache": { + "commandName": "Project", + "commandLineArgs": "-t D:\\workspace\\luban_examples\\Projects\\CustomTemplates --disable_template_cache" } } } \ No newline at end of file diff --git a/src/Luban.Server/Source/Program.cs b/src/Luban.Server/Source/Program.cs index 2d1b742..08579b2 100644 --- a/src/Luban.Server/Source/Program.cs +++ b/src/Luban.Server/Source/Program.cs @@ -1,6 +1,8 @@ using CommandLine; using Luban.Common.Protos; using Luban.Common.Utils; +using Luban.Job.Cfg.Cache; +using Luban.Job.Common.Tpl; using Luban.Job.Common.Utils; using System; using System.IO; @@ -21,6 +23,9 @@ namespace Luban.Server [Option('t', "template_search_path", Required = false, HelpText = "additional template search path")] public string TemplateSearchPath { get; set; } + [Option("disable_cache", Required = false, HelpText = "disable generation cache")] + public bool DisableCache { get; set; } + [Option("i10n:default_timezone", Required = false, HelpText = "default timezone")] public string L10nDefaultTimeZone { get; set; } = "Asia/Shanghai"; } @@ -32,11 +37,14 @@ namespace Luban.Server var options = CommandLineUtil.ParseOptions(args); + FileRecordCacheManager.Ins.Init(!options.DisableCache); + + StringTemplateManager.Ins.Init(!options.DisableCache); if (!string.IsNullOrEmpty(options.TemplateSearchPath)) { - StringTemplateUtil.AddTemplateSearchPath(options.TemplateSearchPath); + StringTemplateManager.Ins.AddTemplateSearchPath(options.TemplateSearchPath); } - StringTemplateUtil.AddTemplateSearchPath(FileUtil.GetPathRelateApplicationDirectory("Templates")); + StringTemplateManager.Ins.AddTemplateSearchPath(FileUtil.GetPathRelateApplicationDirectory("Templates")); Luban.Common.Utils.LogUtil.InitSimpleNLogConfigure(NLog.LogLevel.FromString(options.LogLevel));