/// <summary> /// TODO:关闭一个玩家现场在匹配系统的存在 /// 安全操作,尽管退出 /// </summary> /// <param name="toMatchPlayerShutdownMessage"></param> private void OnShutdownPlayer(ToMatchPlayerShutdownMessage message) { Log.Info("收到了玩家现场发来的关闭消息"); var playerId = message.playerId; var teamId = FindMatchTeamById(playerId); MatchTeam matchTeam = null; if (teamId == default) { return; } if (!m_teamDic.TryGetValue(teamId, out matchTeam)) { return; } lock (matchTeam) { if (matchTeam.State == MatchTeam.MatchTeamState.INBATTLE) { Log.Info("玩家掉线,重连超时,退出队伍 TeamId" + matchTeam.Id + "Team State = " + matchTeam.State); OnExitMatchTeam(teamId, playerId); return; } //匹配队列正在匹配,需要将队伍从匹配队列中删除 if (matchTeam.State == MatchTeam.MatchTeamState.Matching) { Log.Info("玩家掉线,重连超时,退出队伍 TeamId" + matchTeam.Id + "Team State = " + matchTeam.State); OnExitMatchTeam(teamId, playerId); return; } //最简单的退出 直接交给退出队伍执行 if (matchTeam.State == MatchTeam.MatchTeamState.OPEN) { Log.Info("玩家掉线,重连超时,退出队伍 TeamId" + matchTeam.Id + "Team State = " + matchTeam.State); OnExitMatchTeam(teamId, playerId); return; } } }
/// <summary> /// 以下要处理收到的消息 /// </summary> /// <param name="msg"></param> /// <returns></returns> public override Task OnMessage(ILocalMessage msg) { switch (msg.MessageId) { case GameServerConstDefine.MatchSystemCreateMatchTeam: CreateMatchTeamMessage createMatchTeamMessage = msg as CreateMatchTeamMessage; OnCreateMatchTeam(createMatchTeamMessage.playerId); break; case GameServerConstDefine.MatchSystemJoinMatchTeam: JoinMatchTeamMessage joinMatchTeamMessage = msg as JoinMatchTeamMessage; OnJoinMatchTeam(joinMatchTeamMessage.teamId, joinMatchTeamMessage.playerId); break; case GameServerConstDefine.MatchSystemExitMatchTeam: ExitMatchTeamMessage exitMatchTeamMessage = msg as ExitMatchTeamMessage; OnExitMatchTeam(exitMatchTeamMessage.teamId, exitMatchTeamMessage.playerId); break; case GameServerConstDefine.MatchSystemJoinMatchQueue: JoinMatchQueueMessage joinMatchQueueMessage = msg as JoinMatchQueueMessage; OnJoinMatchQueue(joinMatchQueueMessage.teamId, joinMatchQueueMessage.playerId, joinMatchQueueMessage.barrierId); break; case GameServerConstDefine.MatchSystemExitMatchQueue: ExitMatchQueueMessage exitMatchQueueMessage = msg as ExitMatchQueueMessage; OnExitMatchQueue(exitMatchQueueMessage.teamId, exitMatchQueueMessage.playerId); break; case GameServerConstDefine.MatchQueueCompleteSingle: //来自 MatcingSystemQueue 的消息,通知system匹配完成 MatchQueueCompleteSingleMessage matchQueueCompleteSingleMessage = msg as MatchQueueCompleteSingleMessage; OnCompleteMatching(matchQueueCompleteSingleMessage.teamIds, matchQueueCompleteSingleMessage.barrierId); break; case GameServerConstDefine.MatchSysteamMatchTeamUpdateInfo: MatchTeamUpdateInfoMessage matchTeamUpdateInfoMessage = msg as MatchTeamUpdateInfoMessage; OnUpdateMatchTeam(matchTeamUpdateInfoMessage.teamId); break; case GameServerConstDefine.MatchSystemPlayerShutdown: ToMatchPlayerShutdownMessage toMatchPlayerShutdownMessage = msg as ToMatchPlayerShutdownMessage; OnShutdownPlayer(toMatchPlayerShutdownMessage); break; case GameServerConstDefine.UpdateOnlinePlayerList: //更新客户端在线玩家状态 UpdateOnlinePlayerMessage updateOnlinePlayerMessage = msg as UpdateOnlinePlayerMessage; OnUpdateOnlinePlayerRpc(updateOnlinePlayerMessage); break; case GameServerConstDefine.ReleaseBattleToMatchTeam: ReleaseBattleToMatchTeamMessage releaseBattleToMatchTeamMessage = msg as ReleaseBattleToMatchTeamMessage; OnReleaseBattle(releaseBattleToMatchTeamMessage); break; default: break; } return(base.OnMessage(msg)); }