Пример #1
0
        public FightRoom Create(List <int> uidList)
        {
            FightRoom room = null;

            //先检测有没有可重用的房间
            if (roomQueue.Count > 0)
            {
                room = roomQueue.Dequeue();
                room.Init(uidList);
            }

            else //没有就直接创建
            {
                room = new FightRoom(id.Add_Get(), uidList);
            }


            //绑定映射关系
            foreach (int uid in uidList)
            {
                uidRoomIDict.Add(uid, room.Id);
                uidFightingList.Add(uid);
            }

            idRoomDict.Add(room.Id, room);
            return(room);
        }
Пример #2
0
        /// <summary>
        /// 创建战斗房间
        /// </summary>
        /// <param name="uidList"></param>
        /// <returns></returns>
        public FightRoom Create(List <int> uidList)
        {
            FightRoom room = null;

            //先检测是否有可以重用的房间
            if (roomQueue.Count > 0)
            {
                room = roomQueue.Dequeue();
                room.Init(uidList);
            }

            else
            {
                room = new FightRoom(id.Add_Get(), uidList);
            }

            //绑定映射关系
            foreach (int uid in uidList)
            {
                uidRoomIDict.Add(uid, room.Id);
                ClientPeer client = userCache.GetClientPeer(uid);
                room.StartFight(uid, client);
            }
            idRoomDict.Add(room.Id, room);
            return(room);
        }
Пример #3
0
        public FightRoom Create(List <int> uidList)
        {
            if (fightRoomQueue.Count > 0)
            {
                //如果重用队列中有可用房间
                FightRoom fightRoom = fightRoomQueue.Dequeue();
                foreach (var item in uidList)
                {
                    uidRoomidDic.Add(item, fightRoom.ID);

                    PlayerDto playerDto = new PlayerDto(item);
                    fightRoom.playerDtos.Add(playerDto);
                }

                return(fightRoom);
            }
            else
            {
                //如果重用队列没有可用房间,则创建战斗房间
                FightRoom fightRoom = new FightRoom(roomID.Add_Get(), uidList);


                foreach (var item in uidList)
                {
                    if (!uidRoomidDic.ContainsKey(item))
                    {
                        uidRoomidDic.Add(item, roomID.Get());
                    }
                }
                roomidModleDic.Add(roomID.Get(), fightRoom);


                return(fightRoom);
            }
        }
Пример #4
0
        /// <summary>
        /// 销毁房间清空房间内数据并进行重用
        /// </summary>
        /// <param name="roomid"></param>
        public void Destroy(int roomid)
        {
            FightRoom fightRoom = null;

            if (roomidModleDic.ContainsKey(roomid))
            {
                fightRoom = roomidModleDic[roomid];
            }
            else
            {
                throw new Exception("没有这个战斗房间");
            }

            //fightRoom.cardLibrary.Init();//重新初始化牌库
            //fightRoom.TableCards.Clear();
            fightRoom.roundModle.Init();//初始化回合管理器

            for (int i = 0; i < fightRoom.playerDtos.Count; i++)
            {
                uidRoomidDic.Remove(fightRoom.playerDtos[i].UserID);
            }
            fightRoom.playerDtos.Clear();

            fightRoom.LeavePlayerDtos.Clear();



            fightRoomQueue.Enqueue(fightRoom);
        }
Пример #5
0
        /// <summary>
        /// 广播给一个房间内的一个玩家
        /// </summary>
        /// <param name="room"></param>
        /// <param name="opCode"></param>
        /// <param name="subCode"></param>
        /// <param name="value"></param>
        /// <param name="exClient"></param>
        private void singleBrocast(FightRoom room, int opCode, int subCode, object value, int userId, ClientPeer exClient = null)
        {
            SocketMsg msg = new SocketMsg();

            msg.OpCode  = opCode;
            msg.SubCode = subCode;
            msg.Value   = value;
            byte[] data   = EncodeTool.EncodeMsg(msg);
            byte[] packet = EncodeTool.EncodePacket(data);
            foreach (var player in this.PlayerList)
            {
                if (userCache.IsOnline(player.UserId))
                {
                    ClientPeer client = userCache.GetClientPeer(player.UserId);
                    if (player.UserId == userId)
                    {
                        if (client == exClient)
                        {
                            continue;
                        }
                        client.Send(packet);
                    }
                }
            }
        }
Пример #6
0
 /// <summary>
 /// 销毁房间
 /// </summary>
 /// <param name="room"></param>
 public void DestoryRoom(FightRoom room)
 {
     roomIdModleDic.Remove(room.roomId);
     foreach (var player in room.playerList)
     {
         userIdRoomIdDic.Remove(player.userId);
     }
     room.Destory();
     roomQueue.Enqueue(room);
 }
Пример #7
0
        /// <summary>
        /// 获取房间
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public FightRoom GetRoom(int id)
        {
            if (idRoomDict.ContainsKey(id) == false)
            {
                throw new Exception("不存在这个房间");
            }
            FightRoom room = idRoomDict[id];

            return(room);
        }
Пример #8
0
        /// <summary>
        /// 根据用户id获取所在的房间
        /// </summary>
        /// <param name="uid"></param>
        /// <returns></returns>
        public FightRoom GetRoomByUId(int uid)
        {
            if (uidRoomIDict.ContainsKey(uid) == false)
            {
                throw new Exception("当前用户不在房间");
            }
            int       roomId = uidRoomIDict[uid];
            FightRoom room   = GetRoom(roomId);

            return(room);
        }
Пример #9
0
 /// <summary>
 /// 销毁房间
 /// </summary>
 /// <param name="room"></param>
 public void DesRoom(FightRoom room)
 {
     roomIdModelDic.Remove(room.roomId);
     // 移除玩家
     foreach (var player in room.playerList)
     {
         userIdRoomIdDic.Remove(player.id);
     }
     // 初始化数据
     room.Destory();
     // 加入重用队列
     roomQueue.Enqueue(room);
 }
Пример #10
0
        /// <summary>
        /// 销毁房间
        /// </summary>
        /// <param name="room"></param>
        public void Destroy(FightRoom room)
        {
            //移除映射
            idRoomDict.Remove(room.id);
            foreach (PlayerDto player in room.PlayerList)
            {
                uidRoomIdDict.Remove(player.id);
            }
            room.Mutiple = 1;
            room.PlayerList.Clear();
            room.TableCardList.Clear();
            room.LeaveUidList.Clear();
            room.roundModel.Init();
            room.cardModel.Init();

            roomQueue.Enqueue(room);
        }
Пример #11
0
 /// <summary>
 /// 摧毁房间
 /// </summary>
 /// <param name="room"></param>
 public void Destroy(FightRoom room)
 {
     //移除映射关系
     idRoomDict.Remove(room.Id);
     foreach (PlayerDto player in room.PlayerList)
     {
         uidRoomIDict.Remove(player.UserId);
     }
     //初始化房间的数据
     room.PlayerList.Clear();
     room.LeaveUIdList.Clear();
     room.TableCardList.Clear();
     room.libraryModel.Init();
     room.Multiple = 1;
     room.roundModel.Init();
     //添加到重用队列
     roomQueue.Enqueue(room);
 }
Пример #12
0
        /// <summary>
        /// 创建房间
        /// </summary>
        /// <param name="clientList"></param>
        /// <returns></returns>
        public FightRoom CreatRoom(List <ClientPeer> clientList)
        {
            FightRoom room = null;

            if (roomQueue.Count > 0)
            {
                room = roomQueue.Dequeue();
                room.Init(clientList);
            }
            else
            {
                room = new FightRoom(roomId.Add_Get(), clientList);
            }
            foreach (var client in clientList)
            {
                userIdRoomIdDic.Add(client.Id, room.roomId);
            }
            roomIdModelDic.Add(room.roomId, room);
            return(room);
        }
Пример #13
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);
        }
Пример #14
0
        /// <summary>
        /// 创建房间
        /// </summary>
        /// <returns></returns>
        public FightRoom CreatRoom(List <int> uidList)
        {
            FightRoom room = null;

            //检测是否有重用房间
            if (roomQueue.Count > 0)
            {
                room = roomQueue.Dequeue();
                room.Init(uidList);
            }
            else
            {
                room = new FightRoom(id.Add_Get(), uidList);
            }
            //绑定映射关系
            foreach (int uid in uidList)
            {
                uidRoomIdDict.Add(uid, room.id);
            }
            idRoomDict.Add(room.id, room);
            return(room);
        }
Пример #15
0
 /// <summary>
 /// 玩家离开的处理
 /// </summary>
 /// <param name="room"></param>
 public void Leave(FightRoom room)
 {
     Destroy(room);
 }