Ejemplo n.º 1
0
        /// <summary>
        /// 队伍进入匹配队列
        /// 保证是队长发起 保证队伍人数大于0人
        /// </summary>
        public void OnJoinMatchQueue(ulong teamId, string playerId, int barrierId)
        {
            S2CM_JoinMatchQueueComplete message = new S2CM_JoinMatchQueueComplete();

            message.State = S2CM_JoinMatchQueueComplete.Types.State.Fail;
            //1 验证 队伍是否存在
            MatchTeam matchTeam = null;
            GameMatchPlayerContextQueue gameMatchPlayerContextQueue = null;

            if (!m_teamDic.TryGetValue(teamId, out matchTeam))
            {
                goto Result;
            }
            //2 验证队长是否合法
            if (matchTeam.GetCaptainId() != playerId)
            {
                goto Result;
            }
            //3 验证team状态是否满足
            if (matchTeam.State != MatchTeam.MatchTeamState.OPEN)
            {
                goto Result;
            }
            //4 验证是否有对应的关卡匹配队列

            if (!m_gameMatchPlayerCtxQueDic.TryGetValue(barrierId, out gameMatchPlayerContextQueue))
            {
                goto Result;
            }
            //5 向匹配队列加入该队伍  方法内修改matchTeam的状态
            gameMatchPlayerContextQueue.OnJoinMatchQueue(matchTeam);
            message.State       = S2CM_JoinMatchQueueComplete.Types.State.Ok;
            message.BarrierId   = barrierId;
            message.MatchTeamId = teamId;
Result:
            if (message.State == S2CM_JoinMatchQueueComplete.Types.State.Ok)
            {
                PostLocalMessageToCtx(new SystemSendNetMessage {
                    Message = message
                }, matchTeam.GetMembers());
            }
            else
            {
                PostLocalMessageToCtx(new SystemSendNetMessage {
                    Message = message
                }, playerId);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 根据配置文件初始化匹配管理器
        /// 该方法由Server 唯一调用
        /// </summary>
        public bool Initialize(int serverId)
        {
            //初始化匹配队列字典
            m_gameMatchPlayerCtxQueDic = new ConcurrentDictionary <int, GameMatchPlayerContextQueue>();
            //初始化队伍字典
            m_teamDic = new ConcurrentDictionary <UInt64, MatchTeam>();
            //获取关卡配置文件,获取所有的游戏匹配信息
            m_gameBarrierConfigs = GameServer.Instance.m_gameServerGlobalConfig.BarrierConfigs;
            //获取队伍配置文件
            m_gameMatchTeamConfig = GameServer.Instance.m_gameServerGlobalConfig.GameMatchTeam;
            //根据配置文件初始化若干个匹配队列  存入字典中
            foreach (var config in m_gameBarrierConfigs)
            {
                //配置关卡Id 关卡等级 关卡容纳人数
                var queue = new GameMatchPlayerContextQueue(config.Id, config.Level, config.MemberCount, this);
                m_gameMatchPlayerCtxQueDic.TryAdd(config.Id, queue);
            }
            //初始化设置Id生成工具  ps:id由线程安全进行累加
            m_roomIdFactory = new SessionIdFactory(serverId);

            return(true);
        }