Exemplo n.º 1
0
        private ThreadSafeInt roomId = new ThreadSafeInt(-1); // 因为 value++,-1+1=0

        /// <summary>
        /// 进入匹配房间
        /// </summary>
        public MatchRoom Enter(ClientPeer client)
        {
            // 先遍历正在匹配的房间数据模型字典中有没有未满的房间,如果有,加进去
            foreach (var matchRoom in roomIdModelDic.Values)
            {
                if (matchRoom.IsFull())   // 满了就换一个房间
                {
                    continue;
                }
                matchRoom.Enter(client);
                userIdRoomIdDic.Add(client.Id, matchRoom.roomId);
                return(matchRoom);
            }
            // 如果执行到这里,代表正在匹配的房间数据模型字典中没有空位了,自己开一间
            MatchRoom room = null;

            if (roomQueue.Count > 0)   // 优先从重用房间队列里取,如果没有再 new 一个
            {
                room = roomQueue.Dequeue();
            }
            else
            {
                room = new MatchRoom(roomId.AddGet()); // 防止 id 重复
            }
            room.Enter(client);
            roomIdModelDic.Add(room.roomId, room);
            userIdRoomIdDic.Add(client.Id, room.roomId);
            return(room);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 添加计时任务
        /// </summary>
        /// <param name="dealyTime"></param>
        /// <param name="td"></param>
        public void AddTimerEvent(float dealyTime, TimerDelegate td)
        {
            if (dealyTime <= 0)
            {
                return;
            }
            TimerModel model = new TimerModel(id.AddGet(), DateTime.Now.Ticks + (long)(dealyTime * 10000000.0), td);

            idModelDic.TryAdd(model.id, model);
        }
Exemplo n.º 3
0
        private ThreadSafeInt roomId = new ThreadSafeInt(-1); // 因为 value++,-1+1=0

        /// <summary>
        /// 创建房间
        /// </summary>
        public FightRoom CreateRoom(List <ClientPeer> clientList)
        {
            FightRoom room = null;

            // 优先从重用队列里取
            if (roomQueue.Count > 0)
            {
                room = roomQueue.Dequeue();
                room.Init(clientList);
            }
            // 如果没有就自己开一间
            else
            {
                room = new FightRoom(roomId.AddGet(), clientList); // 线程安全的整形
            }
            foreach (var client in clientList)
            {
                userIdRoomIdDic.Add(client.Id, room.roomId);
            }
            roomIdModelDic.Add(room.roomId, room);
            return(room);
        }