From 28626d0cfd2a716d208612287436f254f11d02bb Mon Sep 17 00:00:00 2001 From: walon Date: Sat, 27 Nov 2021 13:45:04 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E7=89=B9=E6=80=A7=E3=80=91=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=20proto=20go=E5=AE=9E=E7=8E=B0=EF=BC=8C=E6=9C=89?= =?UTF-8?q?=E5=BE=85=E5=AE=8C=E5=96=84=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/Generate/GoRender.cs | 14 ++++ .../Source/Generate/TemplateRenderBase.cs | 4 - src/Luban.Server/Luban.Server.csproj | 12 +++ src/Luban.Server/Templates/proto/go/bean.tpl | 73 +++++++++++++++++++ src/Luban.Server/Templates/proto/go/proto.tpl | 73 +++++++++++++++++++ src/Luban.Server/Templates/proto/go/rpc.tpl | 1 + src/Luban.Server/Templates/proto/go/stub.tpl | 1 + 7 files changed, 174 insertions(+), 4 deletions(-) create mode 100644 src/Luban.Job.Proto/Source/Generate/GoRender.cs create mode 100644 src/Luban.Server/Templates/proto/go/bean.tpl create mode 100644 src/Luban.Server/Templates/proto/go/proto.tpl create mode 100644 src/Luban.Server/Templates/proto/go/rpc.tpl create mode 100644 src/Luban.Server/Templates/proto/go/stub.tpl diff --git a/src/Luban.Job.Proto/Source/Generate/GoRender.cs b/src/Luban.Job.Proto/Source/Generate/GoRender.cs new file mode 100644 index 0000000..2a85e5e --- /dev/null +++ b/src/Luban.Job.Proto/Source/Generate/GoRender.cs @@ -0,0 +1,14 @@ +using Luban.Job.Common.Generate; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Luban.Job.Proto.Generate +{ + [Render("go")] + class GoRender : TemplateRenderBase + { + } +} diff --git a/src/Luban.Job.Proto/Source/Generate/TemplateRenderBase.cs b/src/Luban.Job.Proto/Source/Generate/TemplateRenderBase.cs index 36dd4fb..10fc8d9 100644 --- a/src/Luban.Job.Proto/Source/Generate/TemplateRenderBase.cs +++ b/src/Luban.Job.Proto/Source/Generate/TemplateRenderBase.cs @@ -18,7 +18,6 @@ namespace Luban.Job.Proto.Generate { var template = StringTemplateUtil.GetTemplate($"common/{RenderTemplateDir}/enum"); var result = template.Render(e); - return result; } @@ -26,7 +25,6 @@ namespace Luban.Job.Proto.Generate { var template = StringTemplateUtil.GetTemplate($"proto/{RenderTemplateDir}/bean"); var result = template.RenderCode(b); - return result; } @@ -34,7 +32,6 @@ namespace Luban.Job.Proto.Generate { var template = StringTemplateUtil.GetTemplate($"proto/{RenderTemplateDir}/proto"); var result = template.RenderCode(p); - return result; } @@ -42,7 +39,6 @@ namespace Luban.Job.Proto.Generate { var template = StringTemplateUtil.GetTemplate($"proto/{RenderTemplateDir}/rpc"); var result = template.RenderCode(r); - return result; } diff --git a/src/Luban.Server/Luban.Server.csproj b/src/Luban.Server/Luban.Server.csproj index efc58c0..c3eece8 100644 --- a/src/Luban.Server/Luban.Server.csproj +++ b/src/Luban.Server/Luban.Server.csproj @@ -251,6 +251,18 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + PreserveNewest diff --git a/src/Luban.Server/Templates/proto/go/bean.tpl b/src/Luban.Server/Templates/proto/go/bean.tpl new file mode 100644 index 0000000..f1788dd --- /dev/null +++ b/src/Luban.Server/Templates/proto/go/bean.tpl @@ -0,0 +1,73 @@ +{{- + go_full_name = x.go_full_name + parent_def_type = x.parent_def_type + is_abstract_type = x.is_abstract_type + export_fields = x.export_fields + hierarchy_not_abstract_children = x.hierarchy_not_abstract_children +-}} + +package {{x.top_module}} + +import ( + "bright/serialization" +) + +{{x.go_bin_import}} + +type {{go_full_name}} struct { + {{~if parent_def_type~}} + {{parent_def_type.go_full_name}} + {{~end~}} + {{~for field in export_fields ~}} + {{field.convention_name}} {{go_define_type field.ctype}} + {{~end~}} +} + +{{~if !is_abstract_type~}} +func ({{go_full_name}}) GetTypeId() int { + return {{x.id}} +} +{{~end~}} + +{{~if is_abstract_type~}} +func New{{go_full_name}}(_buf *serialization.ByteBuf) (_v interface{}, err error) { + var id int32 + if id, err = _buf.ReadInt() ; err != nil { + return + } + switch id { + {{~for child in hierarchy_not_abstract_children~}} + case {{child.id}}: return New{{child.go_full_name}}(_buf) + {{~end~}} + default: return nil, errors.New("unknown type id") + } + return +} + +func New{{go_full_name}}_Body(_buf *serialization.ByteBuf) (_v *{{go_full_name}}, err error) { + _v = &{{go_full_name}}{} +{{~if parent_def_type~}} + var _p *{{parent_def_type.go_full_name}} + if _p, err = New{{parent_def_type.go_full_name}}_Body(_buf) ; err != nil { return } + _v.{{parent_def_type.go_full_name}} = *_p +{{~end~}} + {{~for field in export_fields ~}} + {{go_deserialize_field field.ctype ("_v." + field.convention_name) '_buf'}} + {{~end~}} + return +} + +{{~else~}} +func New{{go_full_name}}(_buf *serialization.ByteBuf) (_v *{{go_full_name}}, err error) { + _v = &{{go_full_name}}{} +{{~if parent_def_type~}} + var _p *{{parent_def_type.go_full_name}} + if _p, err = New{{parent_def_type.go_full_name}}_Body(_buf) ; err != nil { return } + _v.{{parent_def_type.go_full_name}} = *_p +{{~end~}} + {{~for field in export_fields ~}} + {{go_deserialize_field field.ctype ("_v." + field.convention_name) '_buf'}} + {{~end~}} + return +} +{{~end~}} diff --git a/src/Luban.Server/Templates/proto/go/proto.tpl b/src/Luban.Server/Templates/proto/go/proto.tpl new file mode 100644 index 0000000..f1788dd --- /dev/null +++ b/src/Luban.Server/Templates/proto/go/proto.tpl @@ -0,0 +1,73 @@ +{{- + go_full_name = x.go_full_name + parent_def_type = x.parent_def_type + is_abstract_type = x.is_abstract_type + export_fields = x.export_fields + hierarchy_not_abstract_children = x.hierarchy_not_abstract_children +-}} + +package {{x.top_module}} + +import ( + "bright/serialization" +) + +{{x.go_bin_import}} + +type {{go_full_name}} struct { + {{~if parent_def_type~}} + {{parent_def_type.go_full_name}} + {{~end~}} + {{~for field in export_fields ~}} + {{field.convention_name}} {{go_define_type field.ctype}} + {{~end~}} +} + +{{~if !is_abstract_type~}} +func ({{go_full_name}}) GetTypeId() int { + return {{x.id}} +} +{{~end~}} + +{{~if is_abstract_type~}} +func New{{go_full_name}}(_buf *serialization.ByteBuf) (_v interface{}, err error) { + var id int32 + if id, err = _buf.ReadInt() ; err != nil { + return + } + switch id { + {{~for child in hierarchy_not_abstract_children~}} + case {{child.id}}: return New{{child.go_full_name}}(_buf) + {{~end~}} + default: return nil, errors.New("unknown type id") + } + return +} + +func New{{go_full_name}}_Body(_buf *serialization.ByteBuf) (_v *{{go_full_name}}, err error) { + _v = &{{go_full_name}}{} +{{~if parent_def_type~}} + var _p *{{parent_def_type.go_full_name}} + if _p, err = New{{parent_def_type.go_full_name}}_Body(_buf) ; err != nil { return } + _v.{{parent_def_type.go_full_name}} = *_p +{{~end~}} + {{~for field in export_fields ~}} + {{go_deserialize_field field.ctype ("_v." + field.convention_name) '_buf'}} + {{~end~}} + return +} + +{{~else~}} +func New{{go_full_name}}(_buf *serialization.ByteBuf) (_v *{{go_full_name}}, err error) { + _v = &{{go_full_name}}{} +{{~if parent_def_type~}} + var _p *{{parent_def_type.go_full_name}} + if _p, err = New{{parent_def_type.go_full_name}}_Body(_buf) ; err != nil { return } + _v.{{parent_def_type.go_full_name}} = *_p +{{~end~}} + {{~for field in export_fields ~}} + {{go_deserialize_field field.ctype ("_v." + field.convention_name) '_buf'}} + {{~end~}} + return +} +{{~end~}} diff --git a/src/Luban.Server/Templates/proto/go/rpc.tpl b/src/Luban.Server/Templates/proto/go/rpc.tpl new file mode 100644 index 0000000..a73b61c --- /dev/null +++ b/src/Luban.Server/Templates/proto/go/rpc.tpl @@ -0,0 +1 @@ +// rpc {{x.full_name}} \ No newline at end of file diff --git a/src/Luban.Server/Templates/proto/go/stub.tpl b/src/Luban.Server/Templates/proto/go/stub.tpl new file mode 100644 index 0000000..d067d0b --- /dev/null +++ b/src/Luban.Server/Templates/proto/go/stub.tpl @@ -0,0 +1 @@ +// stub \ No newline at end of file