You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
2.4 KiB
Go

2 years ago
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)
}