From 9083915b62c9e0cd5bc1fc179d8664f73033b39c Mon Sep 17 00:00:00 2001 From: walon Date: Fri, 26 Nov 2021 19:03:03 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E9=87=8D=E6=9E=84=E3=80=91=E9=87=8D?= =?UTF-8?q?=E6=9E=84proto=20JobController=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E7=9A=84=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E4=B8=8D=E5=86=8D=E9=9C=80=E8=A6=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?JobController=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/Generate/CppCodeBinRender.cs | 7 +- .../Source/Generate/CppEditorRender.cs | 1 + .../Source/Generate/CppUE4BpRender.cs | 1 + .../Source/Generate/CppUE4EditorRender.cs | 1 + .../Source/Generate/CsCodeBinRender.cs | 4 +- .../Source/Generate/CsCodeJsonRender.cs | 4 +- .../Source/Generate/CsCodeUnityJsonRender.cs | 4 +- .../Source/Generate/CsEditorRender.cs | 4 +- .../Source/Generate/DataScatterRender.cs | 1 + .../Source/Generate/ExcelConvertRender.cs | 1 + .../Source/Generate/GoCodeBinRender.cs | 1 + .../Source/Generate/GoCodeJsonRender.cs | 4 +- .../Source/Generate/JavaCodeBinRender.cs | 4 +- .../Source/Generate/JavaCodeJsonRender.cs | 4 +- .../Generate/JsonDataMonolithicRender.cs | 1 + .../Source/Generate/LuaCodeBinRender.cs | 1 + .../Source/Generate/LuaCodeLuaRender.cs | 1 + .../Source/Generate/Python3CodeJsonRender.cs | 1 + .../Source/Generate/RenderFactory.cs | 3 +- .../Source/Generate/ResourceListRender.cs | 1 + .../Source/Generate/RustCodeJsonRender.cs | 1 + .../Generate/TemplateDataScatterRender.cs | 1 + .../Source/Generate/TextConvertRender.cs | 1 + .../Generate/TypescriptCodeBinRender.cs | 4 +- .../Generate/TypescriptCodeJsonRender.cs | 4 +- .../Source/Generate/RenderAttribute.cs | 4 +- src/Luban.Job.Proto/Source/GenArgs.cs | 14 ++ src/Luban.Job.Proto/Source/GenContext.cs | 27 ++++ .../Source/Generate/CsRender.cs | 27 ++-- .../Source/Generate/IRender.cs | 18 +++ .../Source/Generate/LuaRender.cs | 43 +++++- .../Source/Generate/RenderBase.cs | 73 ++++++++++ .../Source/Generate/RenderFactory.cs | 31 +++++ .../Source/Generate/TypescriptRender.cs | 74 ++++++++-- src/Luban.Job.Proto/Source/JobController.cs | 129 +++--------------- 35 files changed, 331 insertions(+), 169 deletions(-) rename src/{Luban.Job.Cfg => Luban.Job.Common}/Source/Generate/RenderAttribute.cs (72%) create mode 100644 src/Luban.Job.Proto/Source/GenArgs.cs create mode 100644 src/Luban.Job.Proto/Source/GenContext.cs create mode 100644 src/Luban.Job.Proto/Source/Generate/IRender.cs create mode 100644 src/Luban.Job.Proto/Source/Generate/RenderBase.cs create mode 100644 src/Luban.Job.Proto/Source/Generate/RenderFactory.cs diff --git a/src/Luban.Job.Cfg/Source/Generate/CppCodeBinRender.cs b/src/Luban.Job.Cfg/Source/Generate/CppCodeBinRender.cs index cbb0bc5..2adfa56 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CppCodeBinRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CppCodeBinRender.cs @@ -2,6 +2,7 @@ using Luban.Common.Protos; using Luban.Job.Cfg.Defs; using Luban.Job.Common; using Luban.Job.Common.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System; using System.Collections.Generic; @@ -122,8 +123,7 @@ namespace {ctx.TopModule} public override string RenderService(string name, string module, List tables) { var template = StringTemplateUtil.GetTemplate("config/cpp_bin/tables"); - var result = template.Render(new - { + var result = template.Render(new { Name = name, Tables = tables, }); @@ -133,8 +133,7 @@ namespace {ctx.TopModule} public string RenderStub(string topModule, List types) { var template = StringTemplateUtil.GetTemplate("config/cpp_bin/stub"); - return template.RenderCode(new - { + return template.RenderCode(new { TopModule = topModule, Types = types, }); diff --git a/src/Luban.Job.Cfg/Source/Generate/CppEditorRender.cs b/src/Luban.Job.Cfg/Source/Generate/CppEditorRender.cs index afb7f72..9f8ba97 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CppEditorRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CppEditorRender.cs @@ -1,5 +1,6 @@ using Luban.Job.Cfg.Defs; using Luban.Job.Common.Defs; +using Luban.Job.Common.Generate; using System.Collections.Generic; namespace Luban.Job.Cfg.Generate diff --git a/src/Luban.Job.Cfg/Source/Generate/CppUE4BpRender.cs b/src/Luban.Job.Cfg/Source/Generate/CppUE4BpRender.cs index 3ce3c3c..f4c68d3 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CppUE4BpRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CppUE4BpRender.cs @@ -2,6 +2,7 @@ using Luban.Common.Protos; using Luban.Job.Cfg.Defs; using Luban.Job.Common; using Luban.Job.Common.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using Scriban; using System; diff --git a/src/Luban.Job.Cfg/Source/Generate/CppUE4EditorRender.cs b/src/Luban.Job.Cfg/Source/Generate/CppUE4EditorRender.cs index 4cef97e..399fcae 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CppUE4EditorRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CppUE4EditorRender.cs @@ -2,6 +2,7 @@ using Luban.Common.Protos; using Luban.Job.Cfg.Defs; using Luban.Job.Common; using Luban.Job.Common.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using Scriban; using System; diff --git a/src/Luban.Job.Cfg/Source/Generate/CsCodeBinRender.cs b/src/Luban.Job.Cfg/Source/Generate/CsCodeBinRender.cs index d52ff6a..b9c5fcf 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CsCodeBinRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CsCodeBinRender.cs @@ -1,4 +1,5 @@ using Luban.Job.Cfg.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Collections.Generic; @@ -24,8 +25,7 @@ namespace Luban.Job.Cfg.Generate public override string RenderService(string name, string module, List tables) { var template = StringTemplateUtil.GetTemplate("config/cs_bin/tables"); - var result = template.RenderCode(new - { + var result = template.RenderCode(new { Name = name, Namespace = module, Tables = tables, diff --git a/src/Luban.Job.Cfg/Source/Generate/CsCodeJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/CsCodeJsonRender.cs index 3c53202..4b7bab0 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CsCodeJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CsCodeJsonRender.cs @@ -1,4 +1,5 @@ using Luban.Job.Cfg.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Collections.Generic; @@ -26,8 +27,7 @@ namespace Luban.Job.Cfg.Generate public override string RenderService(string name, string module, List tables) { var template = StringTemplateUtil.GetTemplate("config/cs_json/tables"); - var result = template.RenderCode(new - { + var result = template.RenderCode(new { Name = name, Namespace = module, Tables = tables, diff --git a/src/Luban.Job.Cfg/Source/Generate/CsCodeUnityJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/CsCodeUnityJsonRender.cs index 012b76d..fed3bf0 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CsCodeUnityJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CsCodeUnityJsonRender.cs @@ -1,4 +1,5 @@ using Luban.Job.Cfg.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Collections.Generic; @@ -26,8 +27,7 @@ namespace Luban.Job.Cfg.Generate public override string RenderService(string name, string module, List tables) { var template = StringTemplateUtil.GetTemplate("config/cs_unity_json/tables"); - var result = template.RenderCode(new - { + var result = template.RenderCode(new { Name = name, Namespace = module, Tables = tables, diff --git a/src/Luban.Job.Cfg/Source/Generate/CsEditorRender.cs b/src/Luban.Job.Cfg/Source/Generate/CsEditorRender.cs index 4466129..9445201 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CsEditorRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CsEditorRender.cs @@ -1,6 +1,7 @@ using Luban.Common.Protos; using Luban.Job.Cfg.Defs; using Luban.Job.Common; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Collections.Generic; using System.Threading.Tasks; @@ -44,8 +45,7 @@ namespace Luban.Job.Cfg.Generate public override string RenderService(string name, string module, List tables) { var template = StringTemplateUtil.GetTemplate("config/cs_editor_json/tables"); - var result = template.Render(new - { + var result = template.Render(new { Name = name, Namespace = module, Tables = tables, diff --git a/src/Luban.Job.Cfg/Source/Generate/DataScatterRender.cs b/src/Luban.Job.Cfg/Source/Generate/DataScatterRender.cs index b493532..0aa9220 100644 --- a/src/Luban.Job.Cfg/Source/Generate/DataScatterRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/DataScatterRender.cs @@ -1,6 +1,7 @@ using Luban.Common.Protos; using Luban.Job.Cfg.Cache; using Luban.Job.Cfg.Utils; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Threading.Tasks; diff --git a/src/Luban.Job.Cfg/Source/Generate/ExcelConvertRender.cs b/src/Luban.Job.Cfg/Source/Generate/ExcelConvertRender.cs index 8cf7062..32b9285 100644 --- a/src/Luban.Job.Cfg/Source/Generate/ExcelConvertRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/ExcelConvertRender.cs @@ -3,6 +3,7 @@ using Luban.Job.Cfg.Cache; using Luban.Job.Cfg.DataConverts; using Luban.Job.Cfg.Defs; using Luban.Job.Cfg.Utils; +using Luban.Job.Common.Generate; using Luban.Job.Common.Types; using Luban.Job.Common.TypeVisitors; using Luban.Job.Common.Utils; diff --git a/src/Luban.Job.Cfg/Source/Generate/GoCodeBinRender.cs b/src/Luban.Job.Cfg/Source/Generate/GoCodeBinRender.cs index 7c737ef..ae1de8d 100644 --- a/src/Luban.Job.Cfg/Source/Generate/GoCodeBinRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/GoCodeBinRender.cs @@ -1,4 +1,5 @@ using Luban.Job.Cfg.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Collections.Generic; diff --git a/src/Luban.Job.Cfg/Source/Generate/GoCodeJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/GoCodeJsonRender.cs index 5b5e11a..749af76 100644 --- a/src/Luban.Job.Cfg/Source/Generate/GoCodeJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/GoCodeJsonRender.cs @@ -1,4 +1,5 @@ using Luban.Job.Cfg.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Collections.Generic; @@ -32,8 +33,7 @@ namespace Luban.Job.Cfg.Generate string package = "cfg"; var template = StringTemplateUtil.GetTemplate("config/go_json/tables"); - var result = template.Render(new - { + var result = template.Render(new { Name = name, Namespace = module, Tables = tables, diff --git a/src/Luban.Job.Cfg/Source/Generate/JavaCodeBinRender.cs b/src/Luban.Job.Cfg/Source/Generate/JavaCodeBinRender.cs index c738f39..7db89e5 100644 --- a/src/Luban.Job.Cfg/Source/Generate/JavaCodeBinRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/JavaCodeBinRender.cs @@ -1,4 +1,5 @@ using Luban.Job.Cfg.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Collections.Generic; @@ -26,8 +27,7 @@ namespace Luban.Job.Cfg.Generate public override string RenderService(string name, string module, List tables) { var template = StringTemplateUtil.GetTemplate("config/java_bin/tables"); - var result = template.Render(new - { + var result = template.Render(new { Name = name, Package = module, Tables = tables, diff --git a/src/Luban.Job.Cfg/Source/Generate/JavaCodeJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/JavaCodeJsonRender.cs index 5dbedc6..27af445 100644 --- a/src/Luban.Job.Cfg/Source/Generate/JavaCodeJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/JavaCodeJsonRender.cs @@ -1,4 +1,5 @@ using Luban.Job.Cfg.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Collections.Generic; @@ -26,8 +27,7 @@ namespace Luban.Job.Cfg.Generate public override string RenderService(string name, string module, List tables) { var template = StringTemplateUtil.GetTemplate("config/java_json/tables"); - var result = template.Render(new - { + var result = template.Render(new { Name = name, Package = module, Tables = tables, diff --git a/src/Luban.Job.Cfg/Source/Generate/JsonDataMonolithicRender.cs b/src/Luban.Job.Cfg/Source/Generate/JsonDataMonolithicRender.cs index d9958d9..93de7cd 100644 --- a/src/Luban.Job.Cfg/Source/Generate/JsonDataMonolithicRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/JsonDataMonolithicRender.cs @@ -1,5 +1,6 @@ using Luban.Common.Protos; using Luban.Job.Cfg.Utils; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Collections.Generic; using System.Threading.Tasks; diff --git a/src/Luban.Job.Cfg/Source/Generate/LuaCodeBinRender.cs b/src/Luban.Job.Cfg/Source/Generate/LuaCodeBinRender.cs index d468502..2be4bf6 100644 --- a/src/Luban.Job.Cfg/Source/Generate/LuaCodeBinRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/LuaCodeBinRender.cs @@ -1,5 +1,6 @@ using Luban.Job.Cfg.Defs; using Luban.Job.Common.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using Scriban; using System.Collections.Generic; diff --git a/src/Luban.Job.Cfg/Source/Generate/LuaCodeLuaRender.cs b/src/Luban.Job.Cfg/Source/Generate/LuaCodeLuaRender.cs index 94bf59f..ce35abd 100644 --- a/src/Luban.Job.Cfg/Source/Generate/LuaCodeLuaRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/LuaCodeLuaRender.cs @@ -1,5 +1,6 @@ using Luban.Job.Cfg.Defs; using Luban.Job.Common.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using Scriban; using System; diff --git a/src/Luban.Job.Cfg/Source/Generate/Python3CodeJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/Python3CodeJsonRender.cs index fe699b5..f5a7750 100644 --- a/src/Luban.Job.Cfg/Source/Generate/Python3CodeJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/Python3CodeJsonRender.cs @@ -1,4 +1,5 @@ using Luban.Job.Cfg.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; namespace Luban.Job.Cfg.Generate diff --git a/src/Luban.Job.Cfg/Source/Generate/RenderFactory.cs b/src/Luban.Job.Cfg/Source/Generate/RenderFactory.cs index 84e8129..0ff8fe2 100644 --- a/src/Luban.Job.Cfg/Source/Generate/RenderFactory.cs +++ b/src/Luban.Job.Cfg/Source/Generate/RenderFactory.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using Luban.Job.Common.Generate; +using System.Collections.Generic; using System.Linq; using System.Reflection; diff --git a/src/Luban.Job.Cfg/Source/Generate/ResourceListRender.cs b/src/Luban.Job.Cfg/Source/Generate/ResourceListRender.cs index e74ded1..404529d 100644 --- a/src/Luban.Job.Cfg/Source/Generate/ResourceListRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/ResourceListRender.cs @@ -1,6 +1,7 @@ using Luban.Common.Protos; using Luban.Job.Cfg.RawDefs; using Luban.Job.Cfg.Utils; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Collections.Generic; using System.Threading.Tasks; diff --git a/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs index c1392e6..639d12d 100644 --- a/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs @@ -1,5 +1,6 @@ using Luban.Job.Cfg.Defs; using Luban.Job.Common.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System; using System.Collections.Generic; diff --git a/src/Luban.Job.Cfg/Source/Generate/TemplateDataScatterRender.cs b/src/Luban.Job.Cfg/Source/Generate/TemplateDataScatterRender.cs index 1ea335f..4f00ce8 100644 --- a/src/Luban.Job.Cfg/Source/Generate/TemplateDataScatterRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/TemplateDataScatterRender.cs @@ -1,6 +1,7 @@ using Luban.Common.Protos; using Luban.Job.Cfg.Cache; using Luban.Job.Cfg.Utils; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Threading.Tasks; diff --git a/src/Luban.Job.Cfg/Source/Generate/TextConvertRender.cs b/src/Luban.Job.Cfg/Source/Generate/TextConvertRender.cs index 56b4f69..ab7a247 100644 --- a/src/Luban.Job.Cfg/Source/Generate/TextConvertRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/TextConvertRender.cs @@ -2,6 +2,7 @@ using Luban.Job.Cfg.Cache; using Luban.Job.Cfg.DataVisitors; using Luban.Job.Cfg.Utils; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Threading.Tasks; diff --git a/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeBinRender.cs b/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeBinRender.cs index 00abb7c..96aae97 100644 --- a/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeBinRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeBinRender.cs @@ -1,4 +1,5 @@ using Luban.Job.Cfg.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Collections.Generic; @@ -26,8 +27,7 @@ namespace Luban.Job.Cfg.Generate public override string RenderService(string name, string module, List tables) { var template = StringTemplateUtil.GetTemplate("config/typescript_bin/tables"); - var result = template.RenderCode(new - { + var result = template.RenderCode(new { Name = name, Namespace = module, Tables = tables, diff --git a/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeJsonRender.cs index 1957205..a971310 100644 --- a/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeJsonRender.cs @@ -1,4 +1,5 @@ using Luban.Job.Cfg.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using System.Collections.Generic; @@ -26,8 +27,7 @@ namespace Luban.Job.Cfg.Generate public override string RenderService(string name, string module, List tables) { var template = StringTemplateUtil.GetTemplate("config/typescript_json/tables"); - var result = template.RenderCode(new - { + var result = template.RenderCode(new { Name = name, Namespace = module, Tables = tables, diff --git a/src/Luban.Job.Cfg/Source/Generate/RenderAttribute.cs b/src/Luban.Job.Common/Source/Generate/RenderAttribute.cs similarity index 72% rename from src/Luban.Job.Cfg/Source/Generate/RenderAttribute.cs rename to src/Luban.Job.Common/Source/Generate/RenderAttribute.cs index f83546c..da9735d 100644 --- a/src/Luban.Job.Cfg/Source/Generate/RenderAttribute.cs +++ b/src/Luban.Job.Common/Source/Generate/RenderAttribute.cs @@ -1,9 +1,9 @@ using System; -namespace Luban.Job.Cfg.Generate +namespace Luban.Job.Common.Generate { [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] - class RenderAttribute : System.Attribute + public class RenderAttribute : System.Attribute { public string Name { get; } diff --git a/src/Luban.Job.Proto/Source/GenArgs.cs b/src/Luban.Job.Proto/Source/GenArgs.cs new file mode 100644 index 0000000..d22135b --- /dev/null +++ b/src/Luban.Job.Proto/Source/GenArgs.cs @@ -0,0 +1,14 @@ +using CommandLine; +using Luban.Job.Common; + +namespace Luban.Job.Proto +{ + public class GenArgs : GenArgsBase + { + [Option('g', "gen_type", Required = true, HelpText = "cs,lua,java,cpp,typescript")] + public string GenType { get; set; } + + [Option('s', "service", Required = true, HelpText = "service")] + public string Service { get; set; } + } +} diff --git a/src/Luban.Job.Proto/Source/GenContext.cs b/src/Luban.Job.Proto/Source/GenContext.cs new file mode 100644 index 0000000..eb82522 --- /dev/null +++ b/src/Luban.Job.Proto/Source/GenContext.cs @@ -0,0 +1,27 @@ +using Luban.Job.Common; +using Luban.Job.Common.Defs; +using Luban.Job.Proto.Defs; +using Luban.Job.Proto.Generate; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Threading.Tasks; +using FileInfo = Luban.Common.Protos.FileInfo; + +namespace Luban.Job.Proto +{ + class GenContext + { + public GenArgs GenArgs { get; init; } + public DefAssembly Assembly { get; init; } + public string GenType { get; set; } + public IRender Render { get; set; } + public ELanguage Lan { get; set; } + + public List ExportTypes { get; init; } + + public ConcurrentBag GenCodeFilesInOutputCodeDir { get; init; } + public ConcurrentBag GenScatteredFiles { get; init; } + public List Tasks { get; init; } + } +} diff --git a/src/Luban.Job.Proto/Source/Generate/CsRender.cs b/src/Luban.Job.Proto/Source/Generate/CsRender.cs index cf86987..4f4d0d1 100644 --- a/src/Luban.Job.Proto/Source/Generate/CsRender.cs +++ b/src/Luban.Job.Proto/Source/Generate/CsRender.cs @@ -1,4 +1,5 @@ using Luban.Job.Common.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using Luban.Job.Proto.Defs; using System; @@ -6,27 +7,15 @@ using System.Collections.Generic; namespace Luban.Job.Proto.Generate { - class CsRender + [Render("cs")] + class CsRender : RenderBase { - public string RenderAny(object o) - { - switch (o) - { - case DefEnum e: return Render(e); - case DefBean b: return Render(b); - case DefProto p: return Render(p); - case DefRpc r: return Render(r); - - default: throw new Exception($"unknown render type:'{o}'"); - } - } - - private string Render(DefEnum e) + protected override string Render(DefEnum e) { return RenderUtil.RenderCsEnumClass(e); } - private string Render(DefBean b) + protected override string Render(DefBean b) { var template = StringTemplateUtil.GetTemplate("proto/cs/bean"); var result = template.RenderCode(b); @@ -34,7 +23,7 @@ namespace Luban.Job.Proto.Generate return result; } - private string Render(DefProto p) + protected override string Render(DefProto p) { var template = StringTemplateUtil.GetTemplate("proto/cs/proto"); var result = template.RenderCode(p); @@ -42,7 +31,7 @@ namespace Luban.Job.Proto.Generate return result; } - private string Render(DefRpc r) + protected override string Render(DefRpc r) { var template = StringTemplateUtil.GetTemplate("proto/cs/rpc"); var result = template.RenderCode(r); @@ -50,7 +39,7 @@ namespace Luban.Job.Proto.Generate return result; } - public string RenderStubs(string name, string module, List protos, List rpcs) + public override string RenderStubs(string name, string module, List protos, List rpcs) { var template = StringTemplateUtil.GetTemplate("proto/cs/stub"); var result = template.Render(new diff --git a/src/Luban.Job.Proto/Source/Generate/IRender.cs b/src/Luban.Job.Proto/Source/Generate/IRender.cs new file mode 100644 index 0000000..f45fb37 --- /dev/null +++ b/src/Luban.Job.Proto/Source/Generate/IRender.cs @@ -0,0 +1,18 @@ +using Luban.Job.Proto.Defs; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Luban.Job.Proto.Generate +{ + interface IRender + { + void Render(GenContext ctx); + + string RenderAny(object o); + + string RenderStubs(string name, string module, List protos, List rpcs); + } +} diff --git a/src/Luban.Job.Proto/Source/Generate/LuaRender.cs b/src/Luban.Job.Proto/Source/Generate/LuaRender.cs index 079d2d9..fbe2c0b 100644 --- a/src/Luban.Job.Proto/Source/Generate/LuaRender.cs +++ b/src/Luban.Job.Proto/Source/Generate/LuaRender.cs @@ -1,13 +1,29 @@ +using Luban.Common.Protos; using Luban.Job.Common.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using Luban.Job.Proto.Defs; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace Luban.Job.Proto.Generate { - class LuaRender + [Render("lua")] + class LuaRender : RenderBase { + public override void Render(GenContext ctx) + { + DefAssembly ass = ctx.Assembly; + ctx.Tasks.Add(Task.Run(() => + { + var content = FileHeaderUtil.ConcatAutoGenerationHeader(RenderTypes(ctx.ExportTypes), Common.ELanguage.LUA); + var file = "Types.lua"; + var md5 = CacheFileUtil.GenMd5AndAddCache(file, content); + ctx.GenCodeFilesInOutputCodeDir.Add(new FileInfo() { FilePath = file, MD5 = md5 }); + })); + } + public string RenderTypes(List types) { var enums = types.Where(t => t is DefEnum).ToList(); @@ -17,5 +33,30 @@ namespace Luban.Job.Proto.Generate var template = StringTemplateUtil.GetTemplate("proto/lua/all"); return template.RenderCode(new { Enums = enums, Beans = beans, Protos = protos, Rpcs = rpcs }); } + + protected override string Render(DefEnum e) + { + throw new System.NotImplementedException(); + } + + protected override string Render(DefBean b) + { + throw new System.NotImplementedException(); + } + + protected override string Render(DefProto p) + { + throw new System.NotImplementedException(); + } + + protected override string Render(DefRpc r) + { + throw new System.NotImplementedException(); + } + + public override string RenderStubs(string name, string module, List protos, List rpcs) + { + throw new System.NotImplementedException(); + } } } diff --git a/src/Luban.Job.Proto/Source/Generate/RenderBase.cs b/src/Luban.Job.Proto/Source/Generate/RenderBase.cs new file mode 100644 index 0000000..bb9e7ab --- /dev/null +++ b/src/Luban.Job.Proto/Source/Generate/RenderBase.cs @@ -0,0 +1,73 @@ +using Luban.Common.Protos; +using Luban.Job.Common; +using Luban.Job.Common.Defs; +using Luban.Job.Common.Utils; +using Luban.Job.Proto.Defs; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Luban.Job.Proto.Generate +{ + abstract class RenderBase : IRender + { + public virtual void Render(GenContext ctx) + { + GenerateCodeScatter(ctx); + } + + public string RenderAny(object o) + { + switch (o) + { + case DefEnum e: return Render(e); + case DefBean b: return Render(b); + case DefProto p: return Render(p); + case DefRpc r: return Render(r); + default: throw new Exception($"unknown render type:'{o}'"); + } + } + + protected void GenerateCodeScatter(GenContext ctx) + { + ELanguage lan = ctx.Lan; + var render = ctx.Render; + DefAssembly ass = ctx.Assembly; + foreach (var c in ctx.ExportTypes) + { + ctx.Tasks.Add(Task.Run(() => + { + var content = FileHeaderUtil.ConcatAutoGenerationHeader(render.RenderAny(c), lan); + var file = RenderFileUtil.GetDefTypePath(c.FullName, lan); + var md5 = CacheFileUtil.GenMd5AndAddCache(file, content); + ctx.GenCodeFilesInOutputCodeDir.Add(new FileInfo() { FilePath = file, MD5 = md5 }); + })); + } + ctx.Tasks.Add(Task.Run(() => + { + var module = ass.TopModule; + var name = "ProtocolStub"; + var content = FileHeaderUtil.ConcatAutoGenerationHeader( + render.RenderStubs(name, module, + ctx.ExportTypes.Where(t => t is DefProto).Cast().ToList(), + ctx.ExportTypes.Where(t => t is DefRpc).Cast().ToList()), + lan); + var file = RenderFileUtil.GetDefTypePath(name, lan); + var md5 = CacheFileUtil.GenMd5AndAddCache(file, content); + ctx.GenCodeFilesInOutputCodeDir.Add(new FileInfo() { FilePath = file, MD5 = md5 }); + })); + } + + protected abstract string Render(DefEnum e); + + protected abstract string Render(DefBean b); + + protected abstract string Render(DefProto p); + + protected abstract string Render(DefRpc r); + + public abstract string RenderStubs(string name, string module, List protos, List rpcs); + } +} diff --git a/src/Luban.Job.Proto/Source/Generate/RenderFactory.cs b/src/Luban.Job.Proto/Source/Generate/RenderFactory.cs new file mode 100644 index 0000000..6c722f2 --- /dev/null +++ b/src/Luban.Job.Proto/Source/Generate/RenderFactory.cs @@ -0,0 +1,31 @@ +using Luban.Job.Common.Generate; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace Luban.Job.Proto.Generate +{ + static class RenderFactory + { + static RenderFactory() + { + Dictionary renders = new(); + foreach (var type in typeof(JobController).Assembly.DefinedTypes.Where(t => t.AsType().GetCustomAttributes(typeof(RenderAttribute)).Any())) + { + foreach (var attr in type.GetCustomAttributes()) + { + renders.Add(attr.Name, (IRender)System.Activator.CreateInstance(type)); + } + } + + s_renders = renders; + } + + private static readonly Dictionary s_renders; + + public static IRender CreateRender(string genType) + { + return s_renders.TryGetValue(genType, out var render) ? render : null; + } + } +} diff --git a/src/Luban.Job.Proto/Source/Generate/TypescriptRender.cs b/src/Luban.Job.Proto/Source/Generate/TypescriptRender.cs index 2051494..8362c84 100644 --- a/src/Luban.Job.Proto/Source/Generate/TypescriptRender.cs +++ b/src/Luban.Job.Proto/Source/Generate/TypescriptRender.cs @@ -1,32 +1,76 @@ -using Luban.Job.Common.Defs; +using Luban.Common.Protos; +using Luban.Job.Common; +using Luban.Job.Common.Defs; +using Luban.Job.Common.Generate; using Luban.Job.Common.Utils; using Luban.Job.Proto.Defs; using System; using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; namespace Luban.Job.Proto.Generate { - class TypescriptRender + [Render("typescript")] + class TypescriptRender : RenderBase { - public string RenderAny(object o) + public override void Render(GenContext ctx) { - switch (o) + ctx.Tasks.Add(Task.Run(() => { - case DefEnum e: return Render(e); - case DefBean b: return Render(b); - case DefProto p: return Render(p); - case DefRpc r: return Render(r); + GenArgs args = ctx.GenArgs; + var brightRequirePath = args.TypescriptBrightRequirePath; + var brightPackageName = args.TypescriptBrightPackageName; + var render = ctx.Render; + var ass = ctx.Assembly; + var fileContent = new List(); + if (args.UsePuertsByteBuf) + { + fileContent.Add(TypescriptStringTemplate.PuertsByteBufImports); + } + else + { + fileContent.Add(TypescriptStringTemplate.GetByteBufImports(brightRequirePath, brightPackageName)); + } + if (args.EmbedBrightTypes) + { + fileContent.Add(StringTemplateUtil.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)); + } - default: throw new Exception($"unknown render type:{o}"); - } + 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().ToList(), + ctx.ExportTypes.Where(t => t is DefRpc).Cast().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 }); + })); } - private string Render(DefEnum e) + protected override string Render(DefEnum e) { return RenderUtil.RenderTypescriptEnumClass(e); } - private string Render(DefBean b) + protected override string Render(DefBean b) { var template = StringTemplateUtil.GetTemplate("proto/typescript/bean"); var result = template.RenderCode(b); @@ -34,7 +78,7 @@ namespace Luban.Job.Proto.Generate return result; } - private string Render(DefProto p) + protected override string Render(DefProto p) { var template = StringTemplateUtil.GetTemplate("proto/typescript/proto"); var result = template.RenderCode(p); @@ -42,7 +86,7 @@ namespace Luban.Job.Proto.Generate return result; } - private string Render(DefRpc r) + protected override string Render(DefRpc r) { var template = StringTemplateUtil.GetTemplate("proto/typescript/rpc"); var result = template.RenderCode(r); @@ -50,7 +94,7 @@ namespace Luban.Job.Proto.Generate return result; } - public string RenderStubs(string name, string module, List protos, List rpcs) + public override string RenderStubs(string name, string module, List protos, List rpcs) { var template = StringTemplateUtil.GetTemplate("proto/typescript/stub"); var result = template.Render(new diff --git a/src/Luban.Job.Proto/Source/JobController.cs b/src/Luban.Job.Proto/Source/JobController.cs index 8438684..0da3e41 100644 --- a/src/Luban.Job.Proto/Source/JobController.cs +++ b/src/Luban.Job.Proto/Source/JobController.cs @@ -17,21 +17,12 @@ using FileInfo = Luban.Common.Protos.FileInfo; namespace Luban.Job.Proto { + [Controller("proto")] public class JobController : IJobController { private static readonly NLog.Logger s_logger = NLog.LogManager.GetCurrentClassLogger(); - class GenArgs : GenArgsBase - { - [Option('g', "gen_type", Required = true, HelpText = "cs,lua,java,cpp,typescript")] - public string GenType { get; set; } - - [Option('s', "service", Required = true, HelpText = "service")] - public string Service { get; set; } - } - - private bool TryParseArg(List args, out GenArgs options, out string errMsg) { var helpWriter = new StringWriter(); @@ -117,114 +108,34 @@ namespace Luban.Job.Proto var tasks = new List(); var genCodeFiles = new ConcurrentBag(); + var genScatteredFiles = new ConcurrentBag(); var genType = args.GenType; - switch (genType) + var render = RenderFactory.CreateRender(genType); + if (render == null) { - case "cs": - { - ass.CurrentLanguage = ELanguage.CS; - var render = new CsRender(); - foreach (var c in ass.Types.Values) - { - tasks.Add(Task.Run(() => - { - var content = FileHeaderUtil.ConcatAutoGenerationHeader(render.RenderAny(c), Common.ELanguage.CS); - var file = RenderFileUtil.GetDefTypePath(c.FullName, Common.ELanguage.CS); - var md5 = CacheFileUtil.GenMd5AndAddCache(file, content); - genCodeFiles.Add(new FileInfo() { FilePath = file, MD5 = md5 }); - })); - } - tasks.Add(Task.Run(() => - { - var module = ass.TopModule; - var name = "ProtocolStub"; - var content = FileHeaderUtil.ConcatAutoGenerationHeader( - render.RenderStubs(name, module, - ass.Types.Values.Where(t => t is DefProto).ToList(), - ass.Types.Values.Where(t => t is DefRpc).ToList()), - Common.ELanguage.CS); - var file = RenderFileUtil.GetDefTypePath(name, Common.ELanguage.CS); - var md5 = CacheFileUtil.GenMd5AndAddCache(file, content); - genCodeFiles.Add(new FileInfo() { FilePath = file, MD5 = md5 }); - })); - break; - } - case "lua": - { - ass.CurrentLanguage = ELanguage.LUA; - tasks.Add(Task.Run(() => - { - var render = new LuaRender(); - var content = FileHeaderUtil.ConcatAutoGenerationHeader(render.RenderTypes(ass.Types.Values.ToList()), Common.ELanguage.LUA); - var file = "Types.lua"; - var md5 = CacheFileUtil.GenMd5AndAddCache(file, content); - genCodeFiles.Add(new FileInfo() { FilePath = file, MD5 = md5 }); - })); - break; - } - case "typescript": - { - ass.CurrentLanguage = ELanguage.TYPESCRIPT; - var render = new TypescriptRender(); - var brightRequirePath = args.TypescriptBrightRequirePath; - var brightPackageName = args.TypescriptBrightPackageName; - - tasks.Add(Task.Run(() => - { - var fileContent = new List(); - if (args.UsePuertsByteBuf) - { - fileContent.Add(TypescriptStringTemplate.PuertsByteBufImports); - } - else - { - fileContent.Add(TypescriptStringTemplate.GetByteBufImports(brightRequirePath, brightPackageName)); - } - if (args.EmbedBrightTypes) - { - fileContent.Add(StringTemplateUtil.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 exportTypes) - { - fileContent.Add(render.RenderAny(type)); - } - - fileContent.Add(render.RenderStubs("ProtocolStub", ass.TopModule, ass.Types.Values.Where(t => t is DefProto).ToList(), - ass.Types.Values.Where(t => t is 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); - genCodeFiles.Add(new FileInfo() { FilePath = file, MD5 = md5 }); - })); - - break; - } - default: - { - throw new NotSupportedException($"not support gen type:{genType}"); - } - + throw new NotSupportedException($"not support gen type:{genType}"); } + ass.CurrentLanguage = RenderFileUtil.GetLanguage(genType); + render.Render(new GenContext() + { + GenArgs = args, + Assembly = ass, + Lan = ass.CurrentLanguage, + GenType = genType, + Render = render, + Tasks = tasks, + ExportTypes = exportTypes, + GenCodeFilesInOutputCodeDir = genCodeFiles, + GenScatteredFiles = genScatteredFiles, + }); + await Task.WhenAll(tasks.ToArray()); res.FileGroups.Add(new FileGroup() { Dir = outputCodeDir, Files = genCodeFiles.ToList() }); + res.ScatteredFiles.AddRange(genScatteredFiles); } catch (Exception e) {