| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package login
- import (
- cherryApp "f1-game/internal/cherry_app"
- "f1-game/internal/code"
- "f1-game/internal/component/redis"
- nameActor "f1-game/internal/name/actor"
- nameLocal "f1-game/internal/name/local"
- nameRemote "f1-game/internal/name/remote"
- "f1-game/internal/pb"
- "f1-game/internal/sessions"
- "f1-game/nodes/game/internal/db"
- ctime "github.com/cherry-game/cherry/extend/time"
- clog "github.com/cherry-game/cherry/logger"
- "github.com/cherry-game/cherry/net/parser/pomelo"
- cproto "github.com/cherry-game/cherry/net/proto"
- )
- type actorLogin struct {
- pomelo.ActorBase
- }
- func (p *actorLogin) OnInit() {
- p.Local().Register(nameLocal.Login_Enter, p.playerEnter)
- }
- func (p *actorLogin) OnStop() {
- }
- // playerEnter 玩家进入游戏 game.login.enter
- func (p *actorLogin) playerEnter(session *cproto.Session, req *pb.PlayerEnterRequest) {
- now := ctime.Now()
- // 玩家已登录(防止反复请求)
- if session.Contains(sessions.PlayerID) {
- p.ResponseCode(session, code.PlayerHasLoggedIn)
- return
- }
- gameNodeID := sessions.GetGameNodeID(session)
- if gameNodeID != cherryApp.NodeID() {
- p.ResponseCode(session, code.PlayerLoginServerError)
- return
- }
- // 获取playerID,如果不存在,则分配一个playerID
- playerID, found := db.GetPlayerIDWithUID(session.Uid)
- if !found {
- // 生成全局唯一ID
- playerID = redis.GUID.NewGUID()
- // 设置session为新玩家
- session.Add(sessions.IsNewPlayer, true)
- // 设置语言
- if req.Language != "" {
- session.Add(sessions.Language, req.Language)
- }
- }
- // playerID error
- if playerID < 1 {
- p.ResponseCode(session, code.PlayerIDError)
- return
- }
- // add playerID for session
- session.Add(sessions.PlayerID, playerID)
- // 调用 player actor的函数onEnter()
- p.Call(p.NewChildPath(nameActor.GamePlayer, playerID), nameRemote.Player_OnEnter, session)
- elapsedTime := now.NowDiffMillisecond()
- if elapsedTime > 1000 {
- clog.Infof("playerID = %d enter game. elapsed time %d", playerID, elapsedTime)
- }
- }
|