Подпишись на наш Twitter

Быть в курсе появления новых статей!

Основные сведения

Tandberg MCU 4510

В статье представлен простой пример реализации доступа к Cisco TelePresence MCU 4510, используя XML-RPC v2 API интерфейс.

Для понимания этой статьи читатель должен:

  1. обладать начальными знаниями о C#
  2. уметь компилировать и запускать приложение
  3. знать синтаксис, основные типы данных и структуры управления
  4. Скачать библиотеку XML-RPC .NET 2.5.0
  5. ознакомиться с XML-RPC.NET FAQ для получения общего представления о протоколе XML-RPC и работе с библиотекой XML-RPC .NET

  6. иметь документ Cisco TelePresence MCU Series API 2.8 Product Programming Reference Guide

И так приступим к непосредственной реализации получения информации об устройстве.

Интерфейс ODotNet.Ru.Tandberg.Interfaces

Создаем пустое решение ODotNet.Ru.MCU.ConsoleApplication.

Создание пустого решения ODotNet.Ru.MCU.ConsoleApplication

Добавляем в решение проект библиотеки C# с названием ODotNet.Ru.Tandberg.Interfaces, которая будет предоставлять интерфейс для взаимодействия с MCU.

Создание проекта библиотеки ODotNet.Ru.Tandberg.Interfaces

Необходимо добавить необходимые ссылки на существующие в решении проекты:

  1. Добавить проект xmlrpc в решение
  2. Добавить reference на проект библиотеки xmlrpc

Пример реализации интерфейса файл ITandbergXmlRpc.cs:

using System;

using CookComputing.XmlRpc;

namespace ODotNet.Ru.Tandberg.Interfaces
{
    /// 
    /// Информация по устройству.
    /// 
    [XmlRpcMissingMapping(MappingAction.Ignore)]
    public struct TandbergDeviceInfo
    {
        /// 
        /// The system’s current time (UTC).
        /// 
        //public DateTime currentTime;

        public DateTime currentTime { get; set; }

        /// 
        /// The date and time at which the system was last restarted.
        /// 
        public DateTime restartTime { get; set; }

        /// 
        /// The serial number of the MCU.
        /// 
        public string serial { get; set; }

        /// 
        /// The software version of the running software.
        /// 
        public string softwareVersion { get; set; }

        /// 
        /// The build version of the running software.
        /// 
        public string buildVersion { get; set; }

        /// 
        /// The model of this MCU, e.g. "...... MCU 4210".
        /// 
        public string model { get; set; }

        /// 
        /// The version number of the API implemented by this MCU.
        /// 
        public string apiVersion { get; set; }

        /// 
        /// Currently, only contains the string "feature" with a short description of the feature.
        /// 
        public ActivatedMcuFeatures[] activatedFeatures { get; set; }

        /// 
        /// The total number of video ports on the MCU.
        /// 
        public int totalVideoPorts { get; set; }

        /// 
        ///The total number of additional audio-only ports on the MCU.
        /// 
        public int totalAudioOnlyPorts { get; set; }

        /// 
        /// The total number of streaming and content ports on the MCU. Only provided if non-zero.
        /// 
        public int totalStreamingAndContentPorts { get; set; }

        /// 
        /// enabled or disabled, depending on the Media Port Reservation configuration setting. Only present on MCU products.
        /// 
        public string portReservationMode { get; set; }

        /// 
        /// One of cif or 4cif.
        /// 
        public string maxVideoResolution { get; set; }

        /// 
        /// Array of structs containing a type element and a count element. The type element can be one of sd, hd, hdPlus, or fullhd. count is an integer indicating the number of video ports allocated.
        /// 
        public VideoPort[] videoPortAllocation { get; set; }

        public int uptime { get; set; }
    }

    [XmlRpcMissingMapping(MappingAction.Ignore)]
    public struct VideoPort
    {
        public string type { get; set; }
        public int count { get; set; }
    }

    [XmlRpcMissingMapping(MappingAction.Ignore)]
    public struct ActivatedMcuFeatures
    {
        public string feature { get; set; }
    }

    /// 
    /// XML-RPC интерфейс к Tandberg.
    /// 
    public interface ITandbergXmlRpc : IXmlRpcProxy
    {
        /// 
        /// Получить информацию об устройстве.
        /// 
        /// Имя пользователя.
        /// Пароль.
        /// 
        [XmlRpcMethod("device.query", StructParams = true)]
        TandbergDeviceInfo QueryDevice(string authenticationUser, string authenticationPassword);
    }
}

Структуры данных описывающие набор возвращаемых значений помечены следующим атрибутом:

[XmlRpcMissingMapping(MappingAction.Ignore)]

Это необходимо для того, чтобы если какой-то атрибут отсутствует (согласно документации по некоторые атрибуты опциональные и могут отсутствовать), то не было генерации исключения.

Библиотека ODotNet.Ru.Tandberg

Добавляем в решение проект библиотеки C# с названием ODotNet.Ru.Tandberg, которая будет содержать реализацию метода для получения информации об устройстве.

Создание проекта библиотеки ODotNet.Ru.Tandberg

Необходимо добавить неоходимые ссылки на существующие в решении проекты:

  1. Добавить reference на проект библиотеки ODotNet.Ru.Tandberg.Interfaces
  2. Добавить reference на проект библиотеки xmlrpc

Пример реализации интерфейса файл TandbergMcu.cs:


namespace ODotNet.Ru.Tandberg
{
    /// 
    /// Реализация работы с Танбергом.
    /// 
    public class TandbergMcu
    {
        /// 
        /// Получить информацию об устройстве.
        /// 
        /// 
        public TandbergDeviceInfo? QueryDeviceInfo()
        {
            TandbergDeviceInfo? ret = null;
            const string mcuXmlRpcUserName = "mcu xml rpc user";
            const string mcuXmlRpcPassword = "mcu xml rpc password";

            try
            {
                var proxy = XmlRpcProxyGen.Create<ITandbergXmlRpc>();

                //MCU URL интерфейса XML-RPC v2.
                proxy.Url = "http://example.com/rpc2";
                //Время ожидания ответа на запрос к MCU в миллисекундах.
                proxy.Timeout = 20;
                proxy.UseEmptyParamsTag = true;
                proxy.KeepAlive = false;

                ret = proxy.QueryDevice(mcuXmlRpcUserName,
                    mcuXmlRpcPassword);
            }
            catch (XmlRpcFaultException ex)
            {
                //TODO Добавить обработку ошибки по вкусу
            }

            return ret;
        }
    }
}

Пример вызова для получения информации об устройстве

Добавляем в решение проект консольного приложения C# для тестирования получившегося результата.

Создание проекта консольного приложения

Необходимо добавить неоходимые ссылки на существующие в решении проекты:

  1. Добавить reference на проект библиотеки ODotNet.Ru.Tandberg
  2. Добавить reference на проект библиотеки ODotNet.Ru.Tandberg.Interfaces

Реализация Program.cs:

using System;

using ODotNet.Ru.Tandberg;
using ODotNet.Ru.Tandberg.Interfaces;

namespace ODotNet.Ru.MCU.ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var mcu = new TandbergMcu();
            var result = mcu.QueryDeviceInfo();

            if (null != result)
            {
                var info = ((TandbergDeviceInfo) result);

                //Пример вывода части информации полученной с помощью запроса.

                Console.WriteLine("Модель тандберга: {0}", info.model);
                Console.WriteLine("Версия программного обеспечения тандберга: {0}", info.softwareVersion);
                Console.WriteLine("Версия билда программного обеспечения тандберга: {0}", info.buildVersion);
                Console.WriteLine("Версия API тандберга: {0}", info.apiVersion);
                Console.WriteLine("Текущее время тандберга: {0}", info.currentTime);
                Console.WriteLine("Всего видео портов: {0}", info.totalVideoPorts);
                Console.WriteLine("Всего дополнительных аудио портов: {0}", info.totalAudioOnlyPorts);
            }
        }
    }
}

В итоге должно получиться следующее дерево решения:

Дерево решения

Пример информации, которую можно получить с помощью вызова метода QueryDeviceInfo():

  • Модель тандберга: Codian MCU 4510
  • Версия программного обеспечения тандберга: 4.2(1.50)
  • Версия билда программного обеспечения тандберга: 6.17(1.50)
  • Версия API тандберга: 2.8
  • Текущее время тандберга: 29.02.2012 19:16:33
  • Всего видео портов: 20
  • Всего дополнительных аудио портов: 20

Полный код решения можно скачать с github по адресу: An simple example of the implementation of xml-rpc call to the device.info method of Cisco TelePresence MCU in C # using the API

Возможно вы искали: An example of the implementation of xml-rpc call to the method of Cisco TelePresence MCU in C # using the API




Дата публикации: 01.06.2012 12:00

Ярлыки: C#, CISCO, XML-RPC