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); }
/// <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); }
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); } }
/// <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); }
/// <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); } } } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
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); }
/// <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); }
/// <summary> /// 玩家离开的处理 /// </summary> /// <param name="room"></param> public void Leave(FightRoom room) { Destroy(room); }