diff --git a/modules/version/api.go b/modules/version/api.go new file mode 100644 index 000000000..db43b4fd1 --- /dev/null +++ b/modules/version/api.go @@ -0,0 +1,57 @@ +package version + +import ( + "go_dreamfactory/lego/core" + "go_dreamfactory/lego/core/cbase" + "go_dreamfactory/lego/sys/gin" + "go_dreamfactory/lego/sys/gin/engine" + "reflect" + "strings" +) + +/* +web api 服务组件 +*/ +type Api_Comp struct { + cbase.ModuleCompBase + options *Options //模块参数 + module *Version //当前模块对象 + gin gin.ISys //gin 框架 web的热门框架 +} + +// 组件初始化接口 启动web服务 并注册api +func (this *Api_Comp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { + err = this.ModuleCompBase.Init(service, module, comp, options) + this.options = options.(*Options) + this.module = module.(*Version) + if this.gin, err = gin.NewSys(gin.SetListenPort(this.options.Port)); err != nil { + return + } + this.suitableMethods() //发射注册api + return +} + +func (this *Api_Comp) suitableMethods() { + typ := reflect.TypeOf(this) + vof := reflect.ValueOf(this) + for m := 0; m < typ.NumMethod(); m++ { + method := typ.Method(m) + mname := method.Name + mtype := method.Type + if method.PkgPath != "" { + continue + } + if mtype.NumIn() != 2 { + continue + } + context := mtype.In(1) + if context.String() != "*engine.Context" { + continue + } + if mtype.NumOut() != 0 { + continue + } + this.gin.POST(strings.ToLower(mname), vof.MethodByName(mname).Interface().(func(*engine.Context))) + this.gin.GET(strings.ToLower(mname), vof.MethodByName(mname).Interface().(func(*engine.Context))) + } +} diff --git a/modules/version/module.go b/modules/version/module.go new file mode 100644 index 000000000..8f50fc119 --- /dev/null +++ b/modules/version/module.go @@ -0,0 +1,47 @@ +package version + +import ( + "go_dreamfactory/lego/base" + "go_dreamfactory/lego/core" + "go_dreamfactory/lego/core/cbase" +) + +/* +模块名:web +描述:提供管理员相关的http接口 +开发:李伟 +*/ +func NewModule() core.IModule { + m := new(Version) + return m +} + +type Version struct { + cbase.ModuleBase + options *Options + service base.IRPCXService + api_comp *Api_Comp //提供weba pi服务的组件 +} + +// 模块名 +func (this *Version) GetType() core.M_Modules { + return "version" +} + +// 模块自定义参数 +func (this *Version) NewOptions() (options core.IModuleOptions) { + return new(Options) +} + +func (this *Version) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) { + err = this.ModuleBase.Init(service, module, options) + this.service = service.(base.IRPCXService) + this.options = options.(*Options) + return +} + +func (this *Version) OnInstallComp() { + this.ModuleBase.OnInstallComp() + this.api_comp = this.RegisterComp(new(Api_Comp)).(*Api_Comp) + +} diff --git a/modules/version/options.go b/modules/version/options.go new file mode 100644 index 000000000..4ae2bdb79 --- /dev/null +++ b/modules/version/options.go @@ -0,0 +1,25 @@ +package version + +import ( + "go_dreamfactory/lego/utils/mapstructure" + "go_dreamfactory/modules" +) + +type ( + Options struct { + modules.Options + WebDir string + Port int + Key string + } +) + +func (this *Options) LoadConfig(settings map[string]interface{}) (err error) { + if settings != nil { + if err = this.Options.LoadConfig(settings); err != nil { + return + } + err = mapstructure.Decode(settings, this) + } + return +} diff --git a/services/version/main.go b/services/version/main.go new file mode 100644 index 000000000..79853be93 --- /dev/null +++ b/services/version/main.go @@ -0,0 +1,59 @@ +package main + +import ( + "flag" + "fmt" + "go_dreamfactory/modules/version" + "go_dreamfactory/services" + "go_dreamfactory/sys/db" + + "go_dreamfactory/lego" + "go_dreamfactory/lego/base/rpcx" + "go_dreamfactory/lego/core" + "go_dreamfactory/lego/sys/log" +) + +/* +服务类型:mainte +服务描述:数据库维护以及GM后台接口 服务 +*/ +var ( + conf = flag.String("conf", "./conf/version.yaml", "获取需要启动的服务配置文件") //启动服务的Id +) + +/*服务启动的入口函数*/ +func main() { + flag.Parse() + s := NewService( + rpcx.SetConfPath(*conf), + rpcx.SetVersion("1.0.0.0"), + ) + s.OnInstallComp( //装备组件 + //services.NewGateRouteComp(), //此服务需要接受用户的消息 需要装备网关组件 + ) + lego.Run(s, //运行模块 + version.NewModule(), + ) +} + +func NewService(ops ...rpcx.Option) core.IService { + s := new(Service) + s.Configure(ops...) + return s +} + +// worker 的服务对象定义 +type Service struct { + services.ServiceBase +} + +// 初始化worker需要的一些系统工具 +func (this *Service) InitSys() { + this.ServiceBase.InitSys() + //存储系统 + if err := db.OnInit(this.GetSettings().Sys["db"]); err != nil { + panic(fmt.Sprintf("init sys.db err: %s", err.Error())) + } else { + log.Infof("init sys.db success!") + } +}