Ejemplo n.º 1
0
        public CalendarItem CreateAppointment(HackExchangeContext context, string subject, string description, DateTime startTime, DateTime endTime, Room room, List<string> requiredAttendees)
        {
            var url = context.Endpoint;
            var request = new HttpRequestMessage(HttpMethod.Post, url);
            var postBodyTemplate = LoadXml("CreateAppointment");
            var attendeeTemplate = LoadXml("AttendeeTemplate");

            var roomAttendeeBody = string.Format(attendeeTemplate, room.EmailAddress);
            string requiredAttendeesBody = "";
            if (requiredAttendees != null)
            {
                var attendeesBuilder = new StringBuilder();
                foreach (var attendee in requiredAttendees)
                {
                    attendeesBuilder.AppendFormat(attendeeTemplate, attendee);
                    attendeesBuilder.AppendLine();
                }
                requiredAttendeesBody = attendeesBuilder.Length > 0 ? attendeesBuilder.ToString() : "";
            }

            var startTimeBody = string.Format("{0:yyyy-MM-ddTHH:mm:ssZ}", startTime.ToUniversalTime());
            var endTimeBody = string.Format("{0:yyyy-MM-ddTHH:mm:ssZ}", endTime.ToUniversalTime());

            var postBody = string.Format(postBodyTemplate, subject, description, startTimeBody, endTimeBody, room.Name, requiredAttendeesBody, roomAttendeeBody);

            request.Content = new StringContent(postBody, Encoding.UTF8, "text/xml");

            var clientHandler = new HttpClientHandler()
            {
                Credentials = context.Credentials
            };
            using (var client = new HttpClient(clientHandler))
            {
                var response = client.SendAsync(request).Result;
                var responseBody = response.Content.ReadAsStringAsync().Result;

                var doc = new XPathDocument(new StringReader(responseBody));
                var nav = doc.CreateNavigator();
                var nsManager = new XmlNamespaceManager(nav.NameTable);
                nsManager.AddNamespace("m", "http://schemas.microsoft.com/exchange/services/2006/messages");
                nsManager.AddNamespace("t", "http://schemas.microsoft.com/exchange/services/2006/types");

                CalendarItem calendarItem = null;
                var calendarItemNode = nav.SelectSingleNode("//t:CalendarItem/t:ItemId", nsManager);
                if (calendarItemNode != null)
                {
                    var id = EvaluateXPath(calendarItemNode, nsManager, "@Id");
                    var changeKey = EvaluateXPath(calendarItemNode, nsManager, "@ChangeKey");
                    if (id != null && changeKey != null)
                    {
                        calendarItem = new CalendarItem()
                        {
                            Id = id,
                            ChangeKey = changeKey
                        };
                    }
                }
                return calendarItem;
            }
        }
Ejemplo n.º 2
0
        private ServerController()
        {
            allRooms = new List<Room>();
            allUsers = new List<User>();
            userRooms = new Dictionary<User,IList<Room>>();
            lockedUsers = new List<User>();

            lobby = new Room("Lobby");

            allRooms.Add(lobby);
        }
Ejemplo n.º 3
0
        public IList<Room> GetRooms(HackExchangeContext context)
        {
            var url = context.Endpoint;
            var request = new HttpRequestMessage(HttpMethod.Post, url);
            var postBody = LoadXml("GetRooms");
            request.Content = new StringContent(postBody, Encoding.UTF8, "text/xml");

            var clientHandler = new HttpClientHandler()
            {
                Credentials = context.Credentials
            };
            using (var client = new HttpClient(clientHandler))
            {
                var response = client.SendAsync(request).Result;
                var responseBody = response.Content.ReadAsStringAsync().Result;

                var doc = new XPathDocument(new StringReader(responseBody));
                var nav = doc.CreateNavigator();
                var nsManager = new XmlNamespaceManager(nav.NameTable);
                nsManager.AddNamespace("m", "http://schemas.microsoft.com/exchange/services/2006/messages");
                nsManager.AddNamespace("t", "http://schemas.microsoft.com/exchange/services/2006/types");

                IList<Room> result = new List<Room>();
                var roomIterator = nav.Select("//t:Persona[t:PersonaType='Room']", nsManager);
                foreach (XPathNavigator roomNav in roomIterator)
                {
                    var displayName = EvaluateXPath(roomNav, nsManager, "./t:DisplayName");
                    var roomId = EvaluateXPath(roomNav, nsManager, "./t:PersonaId/@Id");
                    var location = EvaluateXPath(roomNav, nsManager, "./t:OfficeLocations/t:StringAttributedValue/t:Value");
                    var emailAddress = EvaluateXPath(roomNav, nsManager, "./t:EmailAddress/t:EmailAddress");
                    Room r = new Room()
                    {
                        Name = displayName,
                        Location = location,
                        Id = roomId,
                        EmailAddress = emailAddress
                    };
                    result.Add(r);
                }
                return result;
            }
        }
Ejemplo n.º 4
0
        private void JoinRoom(string command)
        {
            string id;
            string userName;
            string roomName;

            string response;

            string[] cmd_parts = command.Split(Config.SEPERATOR);

            id = cmd_parts[0];
            userName = cmd_parts[1];
            roomName = cmd_parts[2];

            User user = new User(userName);
            Room room = new Room(roomName);

            user = allUsers[allUsers.IndexOf(user)];

            if (allRooms.Contains(room))
            {
                room = allRooms[allRooms.IndexOf(room)];
            }
            else
            {
                allRooms.Add(room);
            }
            room.Users.Add(user);

            response = Config.GenerateCommand(Config.CMD.JOIN_ROOM_RESPONSE, id, "OK");
            queueManager.SendToResponseQueue(response);
        }