func LoginServerStart() { var fileName *string = flag.String("config", "", "config file name") var loginConfig loginConfigDef var gkErr *gkerr.GkErrDef flag.Parse() if *fileName == "" { flag.PrintDefaults() return } loginConfig, gkErr = loadConfigFile(*fileName) if gkErr != nil { fmt.Printf("error before log setup %s\n", gkErr.String()) return } gklog.LogInit(loginConfig.LogDir) gkErr = loginConfig.loginInit() if gkErr != nil { gklog.LogGkErr("loginConfig.loginInit", gkErr) return } address := fmt.Sprintf(":%d", loginConfig.Port) http.ListenAndServe(address, &loginConfig) }
func GameServerStart() { var fileName *string = flag.String("config", "", "config file name") var gameConfig *config.GameConfigDef var gkErr *gkerr.GkErrDef flag.Parse() if *fileName == "" { flag.PrintDefaults() return } gameConfig, gkErr = config.LoadConfigFile(*fileName) if gkErr != nil { fmt.Print(gkErr.String()) return } gklog.LogInit(gameConfig.LogDir) var randContext *gkrand.GkRandContextDef var persistenceContext *persistence.PersistenceContextDef var tokenContext *tokenContextDef var sessionContext *ses.SessionContextDef var httpContext *httpContextDef randContext = gkrand.NewGkRandContext() persistenceContext, gkErr = persistence.NewPersistenceContext(gameConfig) if gkErr != nil { gklog.LogGkErr("persistence.NewPersisenceContext", gkErr) return } tokenContext = NewTokenContext(gameConfig, randContext, sessionContext) sessionContext = ses.NewSessionContext(randContext) httpContext = NewHttpContext(gameConfig, persistenceContext, sessionContext, tokenContext) gkErr = httpContext.gameInit() if gkErr != nil { gklog.LogGkErr("httpContext.gameInit", gkErr) return } gkErr = tokenContext.gameInit() if gkErr != nil { gklog.LogGkErr("tokenContext.gameInit", gkErr) return } gklog.LogTrace("game server started") var wsContext *ws.WsContextDef var fieldContext *field.FieldContextDef fieldContext, gkErr = field.NewFieldContext(gameConfig.AvatarSvgDir, gameConfig.TerrainSvgDir, sessionContext, persistenceContext) if gkErr != nil { gklog.LogGkErr("field.NewFieldContext", gkErr) return } wsContext = ws.NewWsContext(gameConfig, sessionContext, fieldContext) ws.SetGlobalWsContext(wsContext) go fieldContext.StartFieldHandler() httpAddress := fmt.Sprintf(":%d", gameConfig.HttpPort) tokenAddress := fmt.Sprintf(":%d", gameConfig.TokenPort) var err error go func() { err = http.ListenAndServe(tokenAddress, tokenContext) if err != nil { gkErr = gkerr.GenGkErr("http.ListenAndServer token", err, ERROR_ID_TOKEN_SERVER_START) gklog.LogGkErr("", gkErr) return } gklog.LogTrace("token listener ended, this is probably bad") }() go func() { err = http.ListenAndServe(httpAddress, httpContext) if err != nil { gkErr = gkerr.GenGkErr("http.ListenAndServer http", err, ERROR_ID_HTTP_SERVER_START) gklog.LogGkErr("", gkErr) return } gklog.LogTrace("http listener ended, this is probably bad") }() go func() { websocketAddress := fmt.Sprintf(":%d", gameConfig.WebsocketPort) gklog.LogTrace("starting web socket listener") if gameConfig.CertificatePath == "" { err = http.ListenAndServe(websocketAddress, websocket.Handler(ws.WebsocketHandler)) } else { err = http.ListenAndServeTLS(websocketAddress, gameConfig.CertificatePath, gameConfig.PrivateKeyPath, websocket.Handler(ws.WebsocketHandler)) } if err != nil { gkErr = gkerr.GenGkErr("http.ListenAndServer websocket", err, ERROR_ID_WEBSOCKET_SERVER_START) gklog.LogGkErr("", gkErr) return } gklog.LogTrace("websocket listener ended, this is probably bad") }() // give it time for the servers to start time.Sleep(time.Second * 60) // wait for all go routines to finish select {} gklog.LogTrace("game server ended") }