package main import ( "flag" "fmt" "math/rand" "os" "runtime" "server/modules/common" "server/modules/crash" "server/modules/customer" "server/modules/pay" "strconv" "time" "github.com/liangdas/mqant/selector" mqant "github.com/liangdas/mqant" "github.com/nats-io/nats.go" "server/config" "server/modules/backend" mgate "server/modules/gate" "server/modules/hall" "server/modules/web" "net/http" _ "net/http/pprof" "github.com/liangdas/mqant/log" "github.com/liangdas/mqant/module" "github.com/liangdas/mqant/registry" "github.com/liangdas/mqant/registry/consul" ) func main() { log.Info("启动游戏服务器 ...") rand.Seed(time.Now().UTC().UnixNano()) runtime.GOMAXPROCS(runtime.NumCPU()) modulefile := flag.String("module", "module.json", "module configure file") logdir := flag.String("log", "logs", "log file directory") wddir := flag.String("wd", ".", "Server work directory") processID := flag.String("pid", "development", "Server ProcessID?") bidir := flag.String("bi", "bi", "bi file directory?") baseConf := flag.String("baseConf", "../baseConf.toml", "base configure file") conf := flag.String("conf", "conf.toml", "server configure file") // flag.String("rule", "rule.toml", "rule config toml file") // flag.String("Game_config", "Game_config.xlsx", "excel game configure file") // flag.String("robot_config", "robot_config.xlsx", "excel robot configure file") // flag.String("drama_config", "drama_config.xlsx", "excel drama configure file") flag.String("name", "name.xlsx", "excel name file") // flag.String("errcode", "errcode.toml", "error code message define") debug := flag.Bool("debug", true, "debug mode, output to screen?") flag.Parse() wd1, _ := os.Getwd() log.Info(wd1) if err := config.LoadBaseConfig(*baseConf); err != nil { panic(fmt.Errorf("load base config file error %+v", err)) } if err := config.LoadConfig(*conf); err != nil { panic(fmt.Errorf("load config file error %+v", err)) } log.Info("-------------- configure -------------------") log.Info("%+v", config.GetBase()) log.Info("%+v", config.GetConfig()) log.Info("---------------------------------------------") if config.GetConfig().WorkID > 0 { go http.ListenAndServe("localhost:"+strconv.Itoa(int(8080+config.GetConfig().WorkID)), nil) } rs := consul.NewRegistry(func(options *registry.Options) { options.Addrs = []string{config.GetRegistry()} }) nc, err := nats.Connect(config.GetNats(), nats.MaxReconnects(10000)) if err != nil { panic(fmt.Errorf("nats error %v", err)) } log.Info("================ flags ================") log.Info("module %s", *modulefile) log.Info("log dir %s", *logdir) log.Info("wd dir %s", *wddir) log.Info("pid %s", *processID) log.Info("bi dir %s", *bidir) log.Info("debug %v", *debug) wd, _ := os.Getwd() log.Info("work directory %s", wd) log.Info("========================================") app := mqant.CreateApp( module.Parse(false), module.Configure(*modulefile), module.LogDir(*logdir), module.WorkDir(*wddir), module.ProcessID(*processID), module.BILogDir(*bidir), module.KillWaitTTL(1*time.Minute), module.Debug(*debug), // 只有是在调试模式下才会在控制台打印日志, 非调试模式下只在日志文件中输出日志 module.Nats(nc), // 指定nats rpc module.Registry(rs), // 指定服务发现 module.RegisterTTL(20*time.Second), module.RegisterInterval(10*time.Second), module.Selector(selector.NewSelector(selector.Registry(rs))), ) err = app.Run( // 已实现的模块都应该在此处传入 hall.Module(), common.Module(), mgate.Module(), web.Module(), backend.Module(), pay.Module(), // blockpay.Module(), crash.Module(), customer.Module(), ) if err != nil { panic(fmt.Errorf("app run failed %v", err)) } }