|
|
|
|
|
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)
|
|
|
|
|
|
}
|