mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-04 15:52:27 +08:00
207 lines
9.6 KiB
Go
207 lines
9.6 KiB
Go
package game
|
|
|
|
import (
|
|
"hk4e/common/mq"
|
|
"hk4e/gate/kcp"
|
|
"hk4e/gs/model"
|
|
"hk4e/node/api"
|
|
"hk4e/pkg/logger"
|
|
"hk4e/protocol/cmd"
|
|
|
|
pb "google.golang.org/protobuf/proto"
|
|
)
|
|
|
|
// 接口路由管理器
|
|
|
|
type HandlerFunc func(player *model.Player, payloadMsg pb.Message)
|
|
|
|
type RouteManager struct {
|
|
// k:cmdId v:HandlerFunc
|
|
handlerFuncRouteMap map[uint16]HandlerFunc
|
|
}
|
|
|
|
func NewRouteManager() (r *RouteManager) {
|
|
r = new(RouteManager)
|
|
r.handlerFuncRouteMap = make(map[uint16]HandlerFunc)
|
|
r.initRoute()
|
|
return r
|
|
}
|
|
|
|
func (r *RouteManager) registerRouter(cmdId uint16, handlerFunc HandlerFunc) {
|
|
r.handlerFuncRouteMap[cmdId] = handlerFunc
|
|
}
|
|
|
|
func (r *RouteManager) doRoute(cmdId uint16, userId uint32, clientSeq uint32, payloadMsg pb.Message) {
|
|
handlerFunc, ok := r.handlerFuncRouteMap[cmdId]
|
|
if !ok {
|
|
logger.Error("no route for msg, cmdId: %v", cmdId)
|
|
return
|
|
}
|
|
player := USER_MANAGER.GetOnlineUser(userId)
|
|
if player == nil {
|
|
logger.Error("player is nil, uid: %v", userId)
|
|
GAME.KickPlayer(userId, kcp.EnetNotFoundSession)
|
|
return
|
|
}
|
|
if !player.Online {
|
|
logger.Error("player not online, uid: %v", userId)
|
|
return
|
|
}
|
|
player.ClientSeq = clientSeq
|
|
SELF = player
|
|
handlerFunc(player, payloadMsg)
|
|
SELF = nil
|
|
}
|
|
|
|
func (r *RouteManager) initRoute() {
|
|
r.registerRouter(cmd.QueryPathReq, GAME.QueryPathReq)
|
|
r.registerRouter(cmd.UnionCmdNotify, GAME.UnionCmdNotify)
|
|
r.registerRouter(cmd.MassiveEntityElementOpBatchNotify, GAME.MassiveEntityElementOpBatchNotify)
|
|
r.registerRouter(cmd.ToTheMoonEnterSceneReq, GAME.ToTheMoonEnterSceneReq)
|
|
r.registerRouter(cmd.PlayerSetPauseReq, GAME.PlayerSetPauseReq)
|
|
r.registerRouter(cmd.EnterSceneReadyReq, GAME.EnterSceneReadyReq)
|
|
r.registerRouter(cmd.PathfindingEnterSceneReq, GAME.PathfindingEnterSceneReq)
|
|
r.registerRouter(cmd.GetScenePointReq, GAME.GetScenePointReq)
|
|
r.registerRouter(cmd.GetSceneAreaReq, GAME.GetSceneAreaReq)
|
|
r.registerRouter(cmd.SceneInitFinishReq, GAME.SceneInitFinishReq)
|
|
r.registerRouter(cmd.EnterSceneDoneReq, GAME.EnterSceneDoneReq)
|
|
r.registerRouter(cmd.EnterWorldAreaReq, GAME.EnterWorldAreaReq)
|
|
r.registerRouter(cmd.PostEnterSceneReq, GAME.PostEnterSceneReq)
|
|
r.registerRouter(cmd.TowerAllDataReq, GAME.TowerAllDataReq)
|
|
r.registerRouter(cmd.SceneTransToPointReq, GAME.SceneTransToPointReq)
|
|
r.registerRouter(cmd.UnlockTransPointReq, GAME.UnlockTransPointReq)
|
|
r.registerRouter(cmd.MarkMapReq, GAME.MarkMapReq)
|
|
r.registerRouter(cmd.ChangeAvatarReq, GAME.ChangeAvatarReq)
|
|
r.registerRouter(cmd.SetUpAvatarTeamReq, GAME.SetUpAvatarTeamReq)
|
|
r.registerRouter(cmd.ChooseCurAvatarTeamReq, GAME.ChooseCurAvatarTeamReq)
|
|
r.registerRouter(cmd.GetGachaInfoReq, GAME.GetGachaInfoReq)
|
|
r.registerRouter(cmd.DoGachaReq, GAME.DoGachaReq)
|
|
r.registerRouter(cmd.CombatInvocationsNotify, GAME.CombatInvocationsNotify)
|
|
r.registerRouter(cmd.AbilityInvocationsNotify, GAME.AbilityInvocationsNotify)
|
|
r.registerRouter(cmd.ClientAbilityInitFinishNotify, GAME.ClientAbilityInitFinishNotify)
|
|
r.registerRouter(cmd.EvtDoSkillSuccNotify, GAME.EvtDoSkillSuccNotify)
|
|
r.registerRouter(cmd.ClientAbilityChangeNotify, GAME.ClientAbilityChangeNotify)
|
|
r.registerRouter(cmd.EntityAiSyncNotify, GAME.EntityAiSyncNotify)
|
|
r.registerRouter(cmd.WearEquipReq, GAME.WearEquipReq)
|
|
r.registerRouter(cmd.ChangeGameTimeReq, GAME.ChangeGameTimeReq)
|
|
r.registerRouter(cmd.GetPlayerSocialDetailReq, GAME.GetPlayerSocialDetailReq)
|
|
r.registerRouter(cmd.SetPlayerBirthdayReq, GAME.SetPlayerBirthdayReq)
|
|
r.registerRouter(cmd.SetNameCardReq, GAME.SetNameCardReq)
|
|
r.registerRouter(cmd.SetPlayerSignatureReq, GAME.SetPlayerSignatureReq)
|
|
r.registerRouter(cmd.SetPlayerNameReq, GAME.SetPlayerNameReq)
|
|
r.registerRouter(cmd.SetPlayerHeadImageReq, GAME.SetPlayerHeadImageReq)
|
|
r.registerRouter(cmd.GetAllUnlockNameCardReq, GAME.GetAllUnlockNameCardReq)
|
|
r.registerRouter(cmd.GetPlayerFriendListReq, GAME.GetPlayerFriendListReq)
|
|
r.registerRouter(cmd.GetPlayerAskFriendListReq, GAME.GetPlayerAskFriendListReq)
|
|
r.registerRouter(cmd.AskAddFriendReq, GAME.AskAddFriendReq)
|
|
r.registerRouter(cmd.DealAddFriendReq, GAME.DealAddFriendReq)
|
|
r.registerRouter(cmd.GetOnlinePlayerListReq, GAME.GetOnlinePlayerListReq)
|
|
r.registerRouter(cmd.PlayerApplyEnterMpReq, GAME.PlayerApplyEnterMpReq)
|
|
r.registerRouter(cmd.PlayerApplyEnterMpResultReq, GAME.PlayerApplyEnterMpResultReq)
|
|
r.registerRouter(cmd.PlayerGetForceQuitBanInfoReq, GAME.PlayerGetForceQuitBanInfoReq)
|
|
r.registerRouter(cmd.GetShopmallDataReq, GAME.GetShopmallDataReq)
|
|
r.registerRouter(cmd.GetShopReq, GAME.GetShopReq)
|
|
r.registerRouter(cmd.BuyGoodsReq, GAME.BuyGoodsReq)
|
|
r.registerRouter(cmd.McoinExchangeHcoinReq, GAME.McoinExchangeHcoinReq)
|
|
r.registerRouter(cmd.AvatarChangeCostumeReq, GAME.AvatarChangeCostumeReq)
|
|
r.registerRouter(cmd.AvatarWearFlycloakReq, GAME.AvatarWearFlycloakReq)
|
|
r.registerRouter(cmd.PullRecentChatReq, GAME.PullRecentChatReq)
|
|
r.registerRouter(cmd.PullPrivateChatReq, GAME.PullPrivateChatReq)
|
|
r.registerRouter(cmd.PrivateChatReq, GAME.PrivateChatReq)
|
|
r.registerRouter(cmd.ReadPrivateChatReq, GAME.ReadPrivateChatReq)
|
|
r.registerRouter(cmd.PlayerChatReq, GAME.PlayerChatReq)
|
|
r.registerRouter(cmd.BackMyWorldReq, GAME.BackMyWorldReq)
|
|
r.registerRouter(cmd.ChangeWorldToSingleModeReq, GAME.ChangeWorldToSingleModeReq)
|
|
r.registerRouter(cmd.SceneKickPlayerReq, GAME.SceneKickPlayerReq)
|
|
r.registerRouter(cmd.ChangeMpTeamAvatarReq, GAME.ChangeMpTeamAvatarReq)
|
|
r.registerRouter(cmd.SceneAvatarStaminaStepReq, GAME.SceneAvatarStaminaStepReq)
|
|
r.registerRouter(cmd.JoinPlayerSceneReq, GAME.JoinPlayerSceneReq)
|
|
r.registerRouter(cmd.EvtAvatarEnterFocusNotify, GAME.EvtAvatarEnterFocusNotify)
|
|
r.registerRouter(cmd.EvtAvatarUpdateFocusNotify, GAME.EvtAvatarUpdateFocusNotify)
|
|
r.registerRouter(cmd.EvtAvatarExitFocusNotify, GAME.EvtAvatarExitFocusNotify)
|
|
r.registerRouter(cmd.EvtEntityRenderersChangedNotify, GAME.EvtEntityRenderersChangedNotify)
|
|
r.registerRouter(cmd.EvtCreateGadgetNotify, GAME.EvtCreateGadgetNotify)
|
|
r.registerRouter(cmd.EvtDestroyGadgetNotify, GAME.EvtDestroyGadgetNotify)
|
|
r.registerRouter(cmd.CreateVehicleReq, GAME.CreateVehicleReq)
|
|
r.registerRouter(cmd.VehicleInteractReq, GAME.VehicleInteractReq)
|
|
r.registerRouter(cmd.SceneEntityDrownReq, GAME.SceneEntityDrownReq)
|
|
r.registerRouter(cmd.GetOnlinePlayerInfoReq, GAME.GetOnlinePlayerInfoReq)
|
|
r.registerRouter(cmd.GCGAskDuelReq, GAME.GCGAskDuelReq)
|
|
r.registerRouter(cmd.GCGInitFinishReq, GAME.GCGInitFinishReq)
|
|
r.registerRouter(cmd.GCGOperationReq, GAME.GCGOperationReq)
|
|
r.registerRouter(cmd.ObstacleModifyNotify, GAME.ObstacleModifyNotify)
|
|
r.registerRouter(cmd.AvatarUpgradeReq, GAME.AvatarUpgradeReq)
|
|
r.registerRouter(cmd.AvatarPromoteReq, GAME.AvatarPromoteReq)
|
|
r.registerRouter(cmd.CalcWeaponUpgradeReturnItemsReq, GAME.CalcWeaponUpgradeReturnItemsReq)
|
|
r.registerRouter(cmd.WeaponUpgradeReq, GAME.WeaponUpgradeReq)
|
|
r.registerRouter(cmd.WeaponPromoteReq, GAME.WeaponPromoteReq)
|
|
r.registerRouter(cmd.WeaponAwakenReq, GAME.WeaponAwakenReq)
|
|
r.registerRouter(cmd.AvatarPromoteGetRewardReq, GAME.AvatarPromoteGetRewardReq)
|
|
r.registerRouter(cmd.SetEquipLockStateReq, GAME.SetEquipLockStateReq)
|
|
r.registerRouter(cmd.TakeoffEquipReq, GAME.TakeoffEquipReq)
|
|
r.registerRouter(cmd.AddQuestContentProgressReq, GAME.AddQuestContentProgressReq)
|
|
r.registerRouter(cmd.NpcTalkReq, GAME.NpcTalkReq)
|
|
r.registerRouter(cmd.EvtAiSyncSkillCdNotify, GAME.EvtAiSyncSkillCdNotify)
|
|
r.registerRouter(cmd.EvtAiSyncCombatThreatInfoNotify, GAME.EvtAiSyncCombatThreatInfoNotify)
|
|
r.registerRouter(cmd.EntityConfigHashNotify, GAME.EntityConfigHashNotify)
|
|
r.registerRouter(cmd.MonsterAIConfigHashNotify, GAME.MonsterAIConfigHashNotify)
|
|
r.registerRouter(cmd.DungeonEntryInfoReq, GAME.DungeonEntryInfoReq)
|
|
r.registerRouter(cmd.PlayerEnterDungeonReq, GAME.PlayerEnterDungeonReq)
|
|
r.registerRouter(cmd.PlayerQuitDungeonReq, GAME.PlayerQuitDungeonReq)
|
|
r.registerRouter(cmd.GadgetInteractReq, GAME.GadgetInteractReq)
|
|
}
|
|
|
|
func (r *RouteManager) RouteHandle(netMsg *mq.NetMsg) {
|
|
switch netMsg.MsgType {
|
|
case mq.MsgTypeGame:
|
|
if netMsg.OriginServerType != api.GATE {
|
|
return
|
|
}
|
|
gameMsg := netMsg.GameMsg
|
|
switch netMsg.EventId {
|
|
case mq.NormalMsg:
|
|
if gameMsg.CmdId == cmd.PlayerLoginReq {
|
|
GAME.PlayerLoginReq(gameMsg.UserId, gameMsg.ClientSeq, netMsg.OriginServerAppId, gameMsg.PayloadMessage)
|
|
return
|
|
}
|
|
if gameMsg.CmdId == cmd.SetPlayerBornDataReq {
|
|
GAME.SetPlayerBornDataReq(gameMsg.UserId, gameMsg.ClientSeq, netMsg.OriginServerAppId, gameMsg.PayloadMessage)
|
|
return
|
|
}
|
|
r.doRoute(gameMsg.CmdId, gameMsg.UserId, gameMsg.ClientSeq, gameMsg.PayloadMessage)
|
|
}
|
|
case mq.MsgTypeConnCtrl:
|
|
if netMsg.OriginServerType != api.GATE {
|
|
return
|
|
}
|
|
connCtrlMsg := netMsg.ConnCtrlMsg
|
|
switch netMsg.EventId {
|
|
case mq.ClientRttNotify:
|
|
GAME.ClientRttNotify(connCtrlMsg.UserId, connCtrlMsg.ClientRtt)
|
|
case mq.ClientTimeNotify:
|
|
GAME.ClientTimeNotify(connCtrlMsg.UserId, connCtrlMsg.ClientTime)
|
|
case mq.UserOfflineNotify:
|
|
GAME.OnUserOffline(connCtrlMsg.UserId, &ChangeGsInfo{
|
|
IsChangeGs: false,
|
|
})
|
|
}
|
|
case mq.MsgTypeServer:
|
|
serverMsg := netMsg.ServerMsg
|
|
switch netMsg.EventId {
|
|
case mq.ServerUserOnlineStateChangeNotify:
|
|
logger.Debug("remote user online state change, uid: %v, online: %v", serverMsg.UserId, serverMsg.IsOnline)
|
|
USER_MANAGER.SetRemoteUserOnlineState(serverMsg.UserId, serverMsg.IsOnline, netMsg.OriginServerAppId)
|
|
case mq.ServerAppidBindNotify:
|
|
GAME.ServerAppidBindNotify(serverMsg.UserId, serverMsg.AnticheatServerAppId, serverMsg.JoinHostUserId)
|
|
case mq.ServerUserMpReq:
|
|
GAME.ServerUserMpReq(serverMsg.UserMpInfo, netMsg.OriginServerAppId)
|
|
case mq.ServerUserMpRsp:
|
|
GAME.ServerUserMpRsp(serverMsg.UserMpInfo)
|
|
case mq.ServerChatMsgNotify:
|
|
GAME.ServerChatMsgNotify(serverMsg.ChatMsgInfo)
|
|
case mq.ServerAddFriendNotify:
|
|
GAME.ServerAddFriendNotify(serverMsg.AddFriendInfo)
|
|
}
|
|
}
|
|
}
|