Пример #1
0
        public IEnumerable <Booking> GetBookings()
        {
            var cmd = new CodecCommand("Bookings", "List");

            cmd.Args.Add("Days", 1);
            cmd.Args.Add("DayOffset", 0);

            var bookings = new List <Booking>();

            var response = Codec.SendCommand(cmd);

            if (response.Code != 200)
            {
                CloudLog.Error("Error getting bookings search, Codec Responded with {0} code", response.Code);
                return(bookings);
            }

            var result = response.Xml.Element("Command").Element("BookingsListResult");

            Debug.WriteInfo("Bookings List");
            Debug.WriteNormal(Debug.AnsiPurple + result + Debug.AnsiReset);

            if (result.Attribute("status").Value == "Error")
            {
                var message = result.Element("Reason").Value;
                CloudLog.Error("Error getting bookings search: {0}", message);
                return(bookings);
            }

            bookings.AddRange(result.Elements("Booking").Select(data => new Booking(data)));

            return(bookings.ToArray());
        }
Пример #2
0
        internal CallHistoryResults Get(CodecCommand cmd)
        {
#if true
            Debug.WriteInfo("Getting Call History");
            foreach (var arg in cmd.Args)
            {
                Debug.WriteInfo("  " + arg.Name, arg.Value.ToString());
            }
#endif
            var response = _codec.SendCommand(cmd);
            Debug.WriteInfo(response.Xml.ToString());
            var result           = response.Xml.Element("Command").Element("CallHistoryGetResult");
            var info             = result.Element("ResultInfo");
            var offset           = int.Parse(info.Element("Offset").Value);
            var limit            = int.Parse(info.Element("Limit").Value);
            var callHistoryItems = result.Elements("Entry").Select(item => new CallHistoryItem(_codec, item)).ToList();
#if DEBUG
            Debug.WriteSuccess("CallHistory Results", callHistoryItems.Count.ToString());
            foreach (var item in callHistoryItems)
            {
                Debug.WriteInfo(item.ToString());
            }
#endif
            return(new CallHistoryResults(callHistoryItems, offset, limit));
        }
Пример #3
0
        public string CreatePhoneBookFolder(string name)
        {
            var cmd = new CodecCommand("/Phonebook/Folder", "Add");

            cmd.Args.Add("Name", name);
            var result = _codec.SendCommand(cmd);

            return(result.Xml.Element("Command").Elements().First().Element("Name").Value);
        }
Пример #4
0
        public void ExternalSourceAdd(string sourceId, string sourceName, int connectorId, ExternalSourceType type)
        {
            var cmd = new CodecCommand("UserInterface/Presentation/ExternalSource", "Add");

            cmd.Args.Add("ConnectorId", connectorId);
            cmd.Args.Add("SourceIdentifier", sourceId);
            cmd.Args.Add("Name", sourceName);
            cmd.Args.Add("Type", type.ToString());
            _codec.SendCommand(cmd);
        }
Пример #5
0
        public CallHistoryResults Get(Filter filter, int offset, int limit)
        {
            var cmd = new CodecCommand("CallHistory", "Get");

            cmd.Args.Add(filter);
            cmd.Args.Add("Offset", offset);
            cmd.Args.Add("Limit", limit);
            cmd.Args.Add("DetailLevel", "Full");
            return(Get(cmd));
        }
Пример #6
0
        public void CreatePhoneBookEntry(string name, string folderId, string email, string number)
        {
            var cmd = new CodecCommand("/Phonebook/Contact", "Add");

            cmd.Args.Add("Name", name);
            cmd.Args.Add("FolderId", folderId);
            cmd.Args.Add("Number", email);
            cmd.Args.Add("Protocol", "SIP");
            var result = _codec.SendCommand(cmd);
            var id     = result.Xml.Element("Command").Elements().First().Element("Name").Value;

            cmd = new CodecCommand("/Phonebook/ContactMethod", "Add");
            cmd.Args.Add("ContactId", id);
            cmd.Args.Add("Number", number);
            cmd.Args.Add("Protocol", "Auto");
            _codec.SendCommand(cmd);
        }
Пример #7
0
        public void Authenticate(ParticipantRole role, string pin)
        {
            var cmd = new CodecCommand("Conference/Call", "AuthenticationResponse");

            cmd.Args.Add("CallId", Id);
            cmd.Args.Add(role);
            if (!string.IsNullOrEmpty(pin))
            {
                cmd.Args.Add("Pin", pin);
            }
            var response = Codec.SendCommand(cmd);

#if DEBUG
            Debug.WriteInfo("Response from authenticate", response.Code.ToString());

            if (response.Xml != null)
            {
                Debug.WriteNormal(response.Xml.ToString());
            }
#endif
        }
Пример #8
0
        internal void GetBookingsAsync()
        {
            var cmd = new CodecCommand("Bookings", "List");

            cmd.Args.Add("Days", 1);
            cmd.Args.Add("DayOffset", 0);

            Codec.SendCommandAsync(cmd, (id, ok, response) =>
            {
                var bookings = new List <Booking>();
#if DEBUG
                Debug.WriteInfo("Bookings List");
                Debug.WriteNormal(Debug.AnsiPurple + response + Debug.AnsiReset);
#endif
                if (response.Attribute("status").Value == "Error")
                {
                    var message = response.Element("Reason").Value;
                    CloudLog.Error("Error getting bookings search (async): {0}", message);
                }

                bookings.AddRange(response.Elements("Booking").Select(data => new Booking(data)));

                _bookings = bookings;

                if (BookingsUpdated == null)
                {
                    return;
                }
                try
                {
                    BookingsUpdated(Codec, bookings);
                }
                catch (Exception e)
                {
                    CloudLog.Exception(e, "Error calling event handler");
                }
            });
        }
Пример #9
0
        public PhonebookSearchResults Search(PhonebookType type, string searchString, int limit, int offset, string folderId)
        {
            var cmd = new CodecCommand("Phonebook", "Search");

            cmd.Args.Add(type);
            cmd.Args.Add("SearchString", searchString);
            cmd.Args.Add("Limit", limit);
            cmd.Args.Add("Offset", offset);
            cmd.Args.Add("Recursive", !string.IsNullOrEmpty(searchString));
            if (!string.IsNullOrEmpty(folderId))
            {
                cmd.Args.Add("FolderId", folderId);
            }

#if DEBUG
            Debug.WriteInfo("Searching Phonebook");
            var sw = new Stopwatch();
            sw.Start();
            foreach (var arg in cmd.Args)
            {
                Debug.WriteInfo("  " + arg.Name, arg.Value.ToString());
            }
#endif
            var response = _codec.SendCommand(cmd);

#if DEBUG
            Debug.WriteInfo("Phonbook search response", "Code = {0}, Stopwatch = {1}", response.Code, sw.ElapsedMilliseconds);
#endif

            if (response.Code != 200)
            {
                CloudLog.Error("Error getting phonebook search, Codec Responded with {0} code", response.Code);
                return(new PhonebookSearchResults(this, type, searchString, folderId, "Codec returned Error code: {0}", response.Code));
            }

            var result = response.Xml.Element("Command").Element("PhonebookSearchResult");

            if (result.Attribute("status").Value == "Error")
            {
                var message = result.Element("Reason").Value;
                CloudLog.Error("Error getting phonebook search: {0}", message);
                return(new PhonebookSearchResults(this, type, searchString, message));
            }

            if (result.Attribute("status").Value == "OK" && result.IsEmpty)
            {
                return(new PhonebookSearchResults(this, type, searchString));
            }

            try
            {
                var folders   = result.Elements("Folder");
                var contacts  = result.Elements("Contact");
                var info      = result.Element("ResultInfo");
                var totalRows = int.Parse(info.Element("TotalRows").Value);
                var items     =
                    folders.Select(
                        xElement =>
                        new PhonebookFolder(_codec, xElement, type)).Cast <PhonebookItem>().ToList();
                items.AddRange(
                    contacts.Select(
                        xElement =>
                        new PhonebookContact(_codec, xElement, type)).Cast <PhonebookItem>());

                foreach (var folder in folders)
                {
                    _folderNames[folder.Element("LocalId").Value] = folder.Element("Name").Value;
                }
#if DEBUG
                Debug.WriteSuccess("Search Results", "{0} to {1} of {2}", offset + 1, offset + items.Count, totalRows);
                foreach (var phonebookItem in items)
                {
                    Debug.WriteSuccess(phonebookItem.Type.ToString(), "{0} ({1}/{2})",
                                       phonebookItem.Name, phonebookItem.Id, phonebookItem.ParentId);
                }
                sw.Stop();
                Debug.WriteInfo("Phonbook search returning", "Count = {0}, Stopwatch = {1}", items.Count, sw.ElapsedMilliseconds);
#endif
                if (!String.IsNullOrEmpty((string)cmd.Args.First(a => a.Name == "SearchString").Value))
                {
                    return(new PhonebookSearchResults(this, type, searchString, folderId, items, offset, limit, totalRows,
                                                      string.Empty, string.Empty));
                }

                foreach (var element in result.Elements())
                {
                    string currentFolderId;

                    switch (element.Name)
                    {
                    case "Contact":
                        if (element.Element("FolderId") != null)
                        {
                            currentFolderId = element.Element("FolderId").Value;
                            return(new PhonebookSearchResults(this, type, searchString, folderId, items, offset, limit,
                                                              totalRows, currentFolderId, _folderNames[currentFolderId]));
                        }

                        return(new PhonebookSearchResults(this, type, searchString, folderId, items, offset, limit, totalRows,
                                                          string.Empty, string.Empty));

                    case "Folder":
                        if (element.Element("ParentFolderId") != null)
                        {
                            currentFolderId = element.Element("ParentFolderId").Value;
                            return(new PhonebookSearchResults(this, type, searchString, folderId, items, offset, limit,
                                                              totalRows, currentFolderId, _folderNames[currentFolderId]));
                        }
                        return(new PhonebookSearchResults(this, type, searchString, folderId, items, offset, limit, totalRows,
                                                          string.Empty, string.Empty));
                    }
                }

                return(new PhonebookSearchResults(this, type, searchString, folderId, items, offset, limit, totalRows,
                                                  string.Empty, string.Empty));
            }
            catch (Exception e)
            {
                var message = string.Format("Error parsing phonebook data, {0}", e.Message);
                if (e is ThreadAbortException)
                {
                    message = "Thread was aborted";
                }
                else
                {
                    CloudLog.Error(message);
                }
                return(new PhonebookSearchResults(this, type, searchString, message));
            }
        }