package main import ( "context" "encoding/json" "flag" "log" "go.uber.org/zap" "git.loafle.net/commons_go/config" "git.loafle.net/commons_go/logging" "git.loafle.net/overflow/overflow_gateway_web/grpc" "git.loafle.net/overflow/overflow_gateway_web/handler" "git.loafle.net/overflow/overflow_gateway_web/redis" "git.loafle.net/overflow/overflow_gateway_web/server" "git.loafle.net/overflow/overflow_gateway_web/subscribe" ) var logger *zap.Logger func main() { configPath := flag.String("config", ".", "The path of config file") flag.Parse() loadConfig(*configPath) ctx := newContext() defer logger.Sync() s := server.NewServer(ctx) rp := redis.NewPool(ctx) grpc.InitializePool(ctx) wsh := handler.NewWebSocketHandler(ctx) subscribe.Subscribe(ctx, rp.Get()) s.HandleSocket(config.GetString("handlers.web.entry"), wsh) s.ListenAndServe(config.GetString("server.addr")) } func loadConfig(path string) { config.SetConfigName("config") config.AddConfigPath(path) err := config.ReadInConfig() if nil != err { log.Fatalf("config error: %v", err) } } func newContext() context.Context { var err error ctx := context.Background() logConfig := config.Sub("logging") buf, err := logConfig.Marshal("json") if err != nil { panic(err) } var cfg zap.Config if err = json.Unmarshal(buf, &cfg); err != nil { panic(err) } logger, err = cfg.Build() if err != nil { panic(err) } ctx = logging.NewContext(ctx, logger) return ctx }