package main import ( "flag" "git.swzry.com/zry/zry-go-program-framework/svcfw" "git.swzry.com/zry/zry-go-program-framework/websubsvc" "net/http" "os" ) var ArgsBindAddr string var ArgsWWWRoot string var ArgsHelp bool var ArgsVueHistoryMode bool var App *svcfw.AppFramework var SubSvcWeb *websubsvc.WebSubService var WebLogic *WebLogicClass var WWWRootFS websubsvc.IFilesystem func main() { flag.BoolVar(&ArgsHelp, "h", false, "print help") flag.BoolVar(&ArgsVueHistoryMode, "v", false, "enable vue history mode") flag.StringVar(&ArgsBindAddr, "b", ":8080", "bind address") flag.StringVar(&ArgsWWWRoot, "w", "./wwwroot", "wwwroot path. default is './wwwroot'") flag.Parse() if ArgsHelp { flag.PrintDefaults() return } App = svcfw.NewAppFramework(true, "main") App.InitConsoleLogBackend(os.Stdout, "") WWWRootFS = websubsvc.NewOsFsWithPrefix(ArgsWWWRoot) WebLogic = NewWebLogic(ArgsBindAddr) SubSvcWeb = websubsvc.NewWebSubService(WebLogic) App.AddSubSvc("web", SubSvcWeb) App.Info("preparing sub services...") err := App.Prepare() if err != nil { App.Panic("error in preparing sub services: ", err) } App.Info("start running sub services...") err = App.Run() App.Info("all sub services end.") if err != nil { App.Panic("error in running sub services: ", err) } } type WebLogicClass struct { bindAddr string } func NewWebLogic(bindAddr string) *WebLogicClass { l := &WebLogicClass{ bindAddr: bindAddr, } return l } func (w WebLogicClass) GetHttpServer(ctx *websubsvc.WebSubServiceContext) *http.Server { return ctx.MakeHttpServer(w.bindAddr, nil) } func (w WebLogicClass) Prepare(ctx *websubsvc.WebSubServiceContext) error { ctx.DefaultMiddleware("access", "err500") ctx.Info("prepare URL router...") ctx.EnableFrontend(WWWRootFS, ArgsVueHistoryMode) return nil }