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