public int NumberOfFreeRooms(DateTime arrivalDate, DateTime departureDate) { return(Rooms.Count() - Reservations.Where(r => (((r.ArrivalDate <= arrivalDate) && (r.DepartureDate >= arrivalDate)) || ((r.ArrivalDate <= departureDate) && (r.DepartureDate >= departureDate)) || ((r.ArrivalDate >= arrivalDate) && (r.DepartureDate <= departureDate)))).Select(r => r.HotelRoom).Count()); }
public override IList <GroupChatModel> FindGroupChats(GroupChatModel filter) { Trace.Call(filter); RefreshRooms(); string searchPattern = null; if (filter == null || String.IsNullOrEmpty(filter.Name)) { // full channel list } else { if (!filter.Name.StartsWith("*") && !filter.Name.EndsWith("*")) { searchPattern = String.Format("*{0}*", filter.Name); } else { searchPattern = filter.Name; } } List <GroupChatModel> chats = new List <GroupChatModel>(Rooms.Count()); IEnumerable <Room> matching; matching = searchPattern == null ? Rooms : Rooms.Where(r => Pattern.IsMatch(r.Name, searchPattern)); foreach (var room in matching) { GroupChatModel chat = new GroupChatModel(room.Id.ToString(), room.Name, null); var users = Client.Get <RoomResponse>(String.Format("/room/{0}.json", chat.ID)).Room.Users; /* Don't waste this data */ lock (Users) { foreach (var user in users) { if (!Users.ContainsKey(user.Id)) { Users[user.Id] = CreatePerson(user); } } } chat.PersonCount = users.Length; chat.Topic = CreateMessageBuilder().AppendMessage(room.Topic).ToMessage(); lock (chat) { chats.Add(chat); } } return(chats); }
/// <summary> /// Convert the game DAT file into XML with accompanying comments /// </summary> public void SaveAsCommentedXML() { XElement gameData = new XElement("GameData"); gameData.Add( new XElement("Header" , new XElement("FileName", GameName) , new XElement("Unknown", Header.Unknown) , new XElement("MaxCarry", Header.MaxCarry) , new XElement("StartRoom", Header.StartRoom) , new XElement("TotalTreasures", Header.TotalTreasures) , new XElement("WordLength", Header.WordLength) , new XElement("LightDuration", Header.LightDuration) , new XElement("TreasureRoom", Header.TreasureRoom) ) ); // gameData.Add(new XElement("Actions" , new XAttribute("Count", Actions.Count()) , Actions.Select((val, ind) => MakeAction(val, ind, false))) ); //add words gameData.Add( new XElement("Words" , new XElement("Verbs", new XAttribute("Count", Verbs.Count()) , Verbs.Select((val, ind) => new { index = ind, value = val }) .Where(v => !v.value.StartsWith("*")) .Select(v => new XElement("Verb", new object[] { new XAttribute("value", v.value), new XAttribute("index", v.index) , from al in Verbs.Skip(v.index + 1).TakeWhile(al => al.StartsWith("*")) select new XElement("Alias", al) } )) ) , new XElement("Nouns", new XAttribute("Count", Nouns.Count()) , Nouns.Select((val, ind) => new { index = ind, value = val }) .Where(v => !v.value.StartsWith("*") & v.value.Length > 0) .Select(v => new XElement("Noun", new object[] { new XAttribute("value", v.value), new XAttribute("index", v.index) , from al in Nouns.Skip(v.index + 1).TakeWhile(al => al.StartsWith("*")) select new XElement("Alias", al) } )) ) ) ); //add rooms string[] directionsLong = { "North", "South", "East", "West", "Up", "Down" }; gameData.Add( new XElement("Rooms" , new XAttribute("Count", Rooms.Count()) , Rooms.Select((val, ind) => new XElement("Room", new object[] { new XAttribute("index", ind) , new XElement("Description", val.RawDescription) , val.Exits.Select((v, i) => new XElement(directionsLong[i], v)) }))) ); //messaes gameData.Add( new XElement("Messages" , new XAttribute("Count", Messages.Count()) , Messages.Select((val, ind) => new XElement("Message", new object[] { new XAttribute("index", ind) , val }))) ); gameData.Add( new XElement("Items" , new XAttribute("Count", Items.Count()) , Items.Select((val, ind) => new XElement("Item", new object[] { new XAttribute("index", ind) , new XElement("Description", val.Description) , new XElement("RoomID", val.Location) , val.Word != null ? new XElement("Word", val.Word) : null })))); gameData.Add( new XElement("Footer" , new XElement("Version", Footer.Version) , new XElement("AdventureNumber", Footer.AdventureNumber) , new XElement("Unknown", Footer.Unknown) ) ); gameData.Save(GameName + ".xml"); }