package login import ( "app/internal/service" "app/servers/internal/service_base" "app/servers/login/logic/fathers" "app/servers/login/logic/login" "app/servers/login/logic/mgr_game" "app/servers/login/logic/mgr_user" "core/abtime" "core/goroutine" "core/log" "core/tools" "net/http" "time" ) func NewLogin(appId int32) *Login { return &Login{IServiceBase: service_base.New(service.Login, appId)} } type Login struct { service_base.IServiceBase httpServ *http.Server userMgr *mgr_user.UserManager gameServerMgr *mgr_game.GameServerManager loginHandler *login.LoginHandler debug bool } func (s *Login) Debug() bool { return s.debug } func (s *Login) OnStart() (err error) { s.IServiceBase.OnStart() s.initCmd() s.debug = s.Config().MustBool("debug", false) s.init() s.startHttp() s.LoadBalance().StartAsFrontend() return nil } // 返回false表示需要延迟处理,待可以退出时,game自己调用Suspend() func (s *Login) OnStop() bool { t1 := abtime.Now() log.KV("actor", s.Actor().Id()).Info("login stop start") defer func() { log.KV("cost", abtime.Now().Sub(t1)).KV("actor", s.Actor().Id()).Info("login stop over") }() s.httpServ.Close() return s.IServiceBase.OnStop() } /*注意不要随意改变加载顺序*/ func (s *Login) init() { defer tools.TimeCostLog(abtime.Now(), 0, "login init over") s.loginHandler = login.New(s) s.userMgr = mgr_user.New(s).Init() s.gameServerMgr = mgr_game.New(s).Init() s.initAPI() } func (s *Login) UserMgr() fathers.IUserManager { return s.userMgr } func (s *Login) GameMgr() fathers.IGameManager { return s.gameServerMgr } func (s *Login) startHttp() { addr := s.Config().String("client_addr") s.httpServ = &http.Server{ Addr: addr, Handler: &tools.HttpHandler{ HanderMap: map[string]http.Handler{ "/login": s.RecordCost(s.loginHandler.HandLogin), //登录 "/newrole": s.RecordCost(s.loginHandler.HandNewRole), //新建角色 "/rolelist": s.RecordCost(s.loginHandler.HandRoleList), //账号列表 "/serverlist": s.RecordCost(s.loginHandler.HandServerList), //服务器列表 }, }, ReadTimeout: 3 * time.Second, WriteTimeout: 3 * time.Second, } goroutine.GoLogic(func() { log.KV("addr", addr).Info("login http start") err := s.httpServ.ListenAndServe() if err != nil { log.KV("addr", addr).KV("err", err).Info("login http stop") } s.Actor().SuspendStop() }, nil) }