using System; using System.Collections.Generic; using System.Linq; using System.Text; using Chop.Database; using System.Threading; using System.Data; namespace Chop.Rooms { public class NavigatorManager { private List mCategories; public void Init() { mCategories = new List(); DataTable table; using (DatabaseClient dbClient = Core.DatabaseManager.GetClient()) table = dbClient.ReadDataTable("SELECT * FROM room_categories"); foreach (DataRow row in table.Rows) mCategories.Add(NavigatorCategory.Parse(row)); } public NavigatorRoom GetRoom(int ID) { using (DatabaseClient dbClient = Core.DatabaseManager.GetClient()) { dbClient.AddParamWithValue("id", ID); return NavigatorRoom.StaticParse(dbClient.ReadDataRow("SELECT * FROM rooms WHERE id = @id")); } } public NavigatorCategory GetCategory(int ID) { foreach (NavigatorCategory category in mCategories) if (category.ID == ID) return category; return null; } public List GetCategories(int ID) { List categories = new List(); foreach (NavigatorCategory category in mCategories) if (category.ParentCategory == ID) categories.Add(category); return categories; } public List GetCategories(CategoryType type, byte rank) { List categories = new List(); foreach (NavigatorCategory category in mCategories) if (category.Type == type && category.mMinimumCreateRank <= rank) categories.Add(category); return categories; } public List GetRooms(int ID, bool hideFull) { List rooms = new List(); DataTable table; using (DatabaseClient dbClient = Core.DatabaseManager.GetClient()) { dbClient.AddParamWithValue("id", ID); dbClient.AddParamWithValue("limit", Core.Config.GetInt("game.navigator.maxresult")); table = dbClient.ReadDataTable("SELECT * FROM rooms WHERE category = @id LIMIT @limit"); } foreach (DataRow row in table.Rows) rooms.Add(NavigatorRoom.StaticParse(row)); return rooms; } public List GetUsersRooms(string username) { List rooms = new List(); DataTable table; using (DatabaseClient dbClient = Core.DatabaseManager.GetClient()) { dbClient.AddParamWithValue("owner", username); dbClient.AddParamWithValue("limit", Core.Config.GetInt("game.navigator.maxrooms")); table = dbClient.ReadDataTable("SELECT * FROM rooms WHERE owner = @owner LIMIT @limit"); } foreach (DataRow row in table.Rows) rooms.Add(NavigatorRoom.StaticParse(row)); return rooms; } public List GetRooms(string searchText) { List rooms = new List(); DataTable table; using (DatabaseClient dbClient = Core.DatabaseManager.GetClient()) { dbClient.AddParamWithValue("text", searchText); dbClient.AddParamWithValue("limit", Core.Config.GetInt("game.navigator.maxresult")); table = dbClient.ReadDataTable("SELECT * FROM rooms WHERE owner LIKE @text + '%' LIMIT @limit"); } foreach (DataRow row in table.Rows) rooms.Add(NavigatorRoom.StaticParse(row)); return rooms; } public List GetRandomRooms() { List rooms = new List(); DataTable table; using (DatabaseClient dbClient = Core.DatabaseManager.GetClient()) table = dbClient.ReadDataTable("SELECT * FROM rooms WHERE casts IS NULL ORDER BY RAND() LIMIT 3"); foreach (DataRow row in table.Rows) rooms.Add(NavigatorRoom.StaticParse(row)); return rooms; } } }