using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Chop.Game.Rooms { public class RoomManager { private List mRoomWorkerList; public Dictionary mRooms; public RoomManager() { mRooms = new Dictionary(); mRoomWorkerList = new List(); } public void Init() // Load publics { } public void AddRoom(Room pRoom) { mRooms.Add(pRoom.mID, pRoom); foreach (RoomWorker worker in mRoomWorkerList) if (worker.Add(pRoom)) return; // No workers with free space, create a new one! RoomWorker w = new RoomWorker(); w.Add(pRoom); w.Start(); mRoomWorkerList.Add(w); } public void RemoveRoom(Room pRoom) { mRooms.Remove(pRoom.mID); pRoom.Dispose(); // TODO: Remove worker if empty and there is free space on another worker... foreach (RoomWorker worker in mRoomWorkerList) { if (worker.Remove(pRoom)) return; } } public bool ContainsRoom(int pID) { return mRooms.ContainsKey(pID); } public Room GetRoom(int pID) { Room room; if (mRooms.TryGetValue(pID, out room)) return room; return null; } public List GetRooms(int pCategoryID) { List rooms = new List(); foreach (Room room in mRooms.Values) if (room.mCategory == pCategoryID) rooms.Add(room); return rooms; } public Dictionary GetRooms() { return mRooms; } } }