| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package user
- import (
- capp "f1-game/internal/cherry_app"
- "f1-game/internal/code"
- "f1-game/internal/constant"
- nameRemote "f1-game/internal/name/remote"
- "f1-game/internal/pb"
- "f1-game/internal/sessions"
- cfacade "github.com/cherry-game/cherry/facade"
- clog "github.com/cherry-game/cherry/logger"
- "github.com/cherry-game/cherry/net/parser/pomelo"
- pmessage "github.com/cherry-game/cherry/net/parser/pomelo/message"
- cproto "github.com/cherry-game/cherry/net/proto"
- )
- func localRoute(pomeloAgent *pomelo.Agent, session *cproto.Session, route *pmessage.Route, msg *pmessage.Message, nodeID string) {
- targetPath := cfacade.NewPath(nodeID, route.HandleName())
- err := pomelo.ClusterLocalDataRoute(pomeloAgent, session, route, msg, nodeID, targetPath)
- if err != nil {
- pomeloAgent.ResponseCode(session, code.NodeRequestError, true)
- }
- }
- // gameNodeRoute 实现agent路由消息到游戏节点
- func gameNodeRoute(pomeloAgent *pomelo.Agent, session *cproto.Session, route *pmessage.Route, msg *pmessage.Message) {
- // 获取绑定的ServerID
- gameNodeID := sessions.GetGameNodeID(session)
- if gameNodeID == "" {
- pomeloAgent.Kick(upa.notLoginCode, true)
- return
- }
- localRoute(pomeloAgent, session, route, msg, gameNodeID)
- }
- func mapNodeRoute(pomeloAgent *pomelo.Agent, session *cproto.Session, route *pmessage.Route, msg *pmessage.Message) {
- // game.login.enter 后才能请求 map 节点
- mapNodeID := sessions.GetMapNodeID(session)
- if mapNodeID == "" {
- pomeloAgent.ResponseCode(session, code.NodeMapNodeIDIsEmpty, true)
- return
- }
- // 检查节点是否在发现服务器上,如果没有,则通知玩家
- if _, found := capp.Discovery().GetMember(mapNodeID); !found {
- pomeloAgent.ResponseCode(session, code.NodeMapIsClosed, true)
- return
- }
- localRoute(pomeloAgent, session, route, msg, mapNodeID)
- }
- // CheckNodeState 判断节点是否可用
- //
- // 判断节点是否达到玩家在线阀值
- // 判断节点维护状态&白名单过滤
- func checkNodeState(nodeType string, nodeID string, actorID string, uid int64, ip string) int32 {
- var (
- req = &pb.User{
- Uid: uid,
- Ip: ip,
- }
- rsp = &pb.I32{}
- targetPath = cfacade.NewPath(nodeID, actorID)
- )
- errCode := capp.CallWait(targetPath, nameRemote.Ops_CheckNodeState, req, rsp)
- if code.IsFail(errCode) {
- clog.Warnf("Check node state fail. nodeID = %v, actorID = %v, errCode = %v", nodeID, actorID, errCode)
- switch nodeType {
- case constant.NodeGame:
- errCode = code.NodeIsClosed
- case constant.NodeMap:
- errCode = code.NodeMapIsClosed
- default:
- errCode = code.NodeIsClosed
- }
- return errCode
- }
- return rsp.Value
- }
|