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); }
/// <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); }
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); }