public Task<bool> ReserveRoom(RoomInfo room, TimeSpan duration) { Appointment appointment = new Appointment(_service); // Set the properties on the appointment object to create the appointment. appointment.Subject = "Room reservation"; appointment.Body = $"Automatically created by FindMeRoomOSS on {DateTime.Now}"; appointment.Start = DateTime.Now; appointment.End = appointment.Start + duration; appointment.Location = room.RoomId; appointment.RequiredAttendees.Add(room.RoomId); // Save the appointment to your calendar. appointment.Save(SendInvitationsMode.SendToAllAndSaveCopy); PropertySet psPropSet = new PropertySet(BasePropertySet.FirstClassProperties); // Verify that the appointment was created by using the appointment's item ID. appointment = Item.Bind(_service, appointment.Id, psPropSet) as Appointment; if (appointment == null) { return Task.FromResult(false); } return Task.Run(async () => { var finishTime = DateTime.Now + CreationTimeout; Attendee roomAttendee; // wait till the room accepts do { Debug.WriteLine("Waiting for response..."); await Task.Delay(1000); // refresh appointment data appointment = Item.Bind(_service, appointment.Id, psPropSet) as Appointment; if (appointment == null) { Debug.WriteLine("Appointment has been deleted"); return false; } roomAttendee = appointment.RequiredAttendees.FirstOrDefault(att => att.Address == room.RoomId); if (roomAttendee == null) { Debug.WriteLine("Someone is messing with our appointment"); return false; } } while (DateTime.Now < finishTime && ( !roomAttendee.ResponseType.HasValue || roomAttendee.ResponseType == MeetingResponseType.Unknown || roomAttendee.ResponseType == MeetingResponseType.NoResponseReceived )); Debug.WriteLine($"Response is {roomAttendee.ResponseType}..."); return roomAttendee.ResponseType.HasValue && roomAttendee.ResponseType.Value == MeetingResponseType.Accept; }); }
public RoomAvailabilityInfo(TimeInterval availability, RoomInfo room) { Availability = availability; Room = room; }