Описание структуры системы — различия между версиями

Материал из Integra-S Wiki
Перейти к: навигация, поиск
 
(не показано 5 промежуточных версий этого же участника)
Строка 1: Строка 1:
[Архитектура сервера приложения]
+
[[Архитектура сервера приложения]]
  
  
==Описание подписок на основе селекторов==
+
[[Описание подписок на основе селекторов]]
  
  
===Предпосылка===
+
[[Описание структуры типов Интегра-Планета-4D]]
  
Усложнение критериев выборки интересующих подписчика событий, например
 
в задачах трекинга необходима подписка по событиям внутри полигона.
 
  
Подписки на селекторах должны обеспечить высокую степень управляемости очередей
+
[[Описание универсальных типов протокола передачи данных в интеграцию]]
сообщений обусловленную использованием специальных объектов для конфигурирования
 
очереди, а не компонентов составного имени темы.
 
  
===Термины===
 
  
Селектор - объект проверяющий сообщение и возможно его контекст на соответствие
+
[[Протокол работы с сервером приложения Интегра SOAP]]
некоторому условию, которое и является сутью селектора. Простые селекторы могут проверять
 
например равенство некоторого поля сообщения заданному значению, другие - составные,
 
содержать другие селекторы и производить над ними операции AND, OR, NOT. То есть
 
компоновать другие селекторы в дерево булевого выражения.
 
 
 
Сообщение - объект описывающий изменение параметра базы данных
 
 
 
Контекст - объект или свойство объекта не входящий в объект-сообщение но связанный с ним.
 
 
 
Текущие дата и время, пользователь отправивший изменения, объект сервера, связи объекта - всё это примеры контекстов.
 
 
 
Для эффективной работы с контекстами нужна модель в памяти firefly, другие более просты, например текущие дата и время.
 
 
 
Мутатор - объект трансформирующий сообщение, добавляющий или удаляющий поля в соответствии
 
с некоторым критерием или безусловно. Концепция мутаторов припасена на будущее, в запланированной
 
реализации скорее всего найдёт ограниченное применение. Но вообще, конвейерная обработка сообщений
 
на одном или разных узлах сети firefly открывает новые возможности постепенного добавления в сообщение
 
новых данных и гибкого перераспределения информационных потоков.
 
 
 
Как это работает:
 
 
 
# Обходим текущие темы сообщений;
 
# Каждой теме соответствует единственный, возможно композитный селектор;
 
# Каждое сообщение транзакции проходит проверку на соответствие критериями селектора текущей
 
очереди и в случае успеха добавляется в массив транзакции для текущей темы;
 
# Когда транзакции для каждой темы сформированы производится отправка данных (publish);
 
 
 
 
 
===Управление темами===
 
*com.integra.open_topic(selector) где selector это сериализованный в JSON селектор.
 
 
 
:Возвращает имя подписки соответствующей переданному селектору при успехе.
 
 
 
:Имя содержит UUID что гарантирует её недоступность для других пользователей.
 
 
 
*com.integra.close_topic(topic_name) где topic_name это имя подписки которое вернулось при открытии темы.
 
 
 
:Возвращает имя подписки при успехе. 
 
 
 
:Закрыть подписку может только владелец.
 
 
 
===Автоматическое закрытие тем===
 
 
 
Если на тему никто не подписался то она закроется через минуту.
 
 
 
Если у подписки были подписчики, а потом все отписались то она закроется автоматически не позже чем через query_timout секунд.
 
 
 
 
 
 
 
 
 
{| class="simple" border="1" style="text-align:center"
 
|+ style="background:#FFCC00"|'''Доступные селекторы'''
 
|Наименование типа
 
|Композитный
 
|Параметры
 
|-
 
|PropertyEqualitySelector
 
|нет
 
|name - имя свойства
 
value - значение свойства
 
|-
 
|AndCompositeSelector
 
|да
 
|массив вложенных селекторов
 
|-
 
|PositionInPolygonSelector
 
|нет
 
|polygon_text - текстовое представление полигона(как в PostgreSQL)
 
|-
 
|ValueInListSelector
 
|нет
 
|name - имя свойства-массива
 
value - значение
 
|}
 
 
 
'''Пример селектора'''
 
 
 
1 {
 
2        "$type": "AndCompositeSelector",
 
3        "selectors": [
 
4            {
 
5                "$type": "PropertyEqualitySelector",
 
6                "name": "name",
 
7                "value": "ip"
 
8            },
 
9            {
 
10                "$type": "PropertyEqualitySelector",
 
11                "name": "value",
 
12                "value": "127.0.0.1"
 
13            },
 
14            {
 
15                "$type": "PositionInPolygonSelector",
 
16                "polygon_text": "POLYGON ((0 0, 0 1, 1 1, 1 0, 0 0))"
 
17            },
 
18            {
 
19                "$type": "ValueInListSelector",
 
20                "name": "users",
 
21                "value": 5
 
22            }
 
23        ]
 
24    }
 
 
 
'''Пример транзакции из одного изменения проходящего проверку селектором из примера'''
 
 
 
1            [
 
2                {
 
3                    "server": "76606d62-a514-11e4-8c37-a7064178f246",
 
4                    "txid": 843037,
 
5                    "version": 51425717,
 
6                    "id": "883c24e2-02cb-4988-8e07-3c8bd24654da",
 
7                    "position": "POINT (0.1 0.2)",
 
8                    "name": "ip",
 
9                    "value": "127.0.0.1",
 
10                    "datetime": "2015-09-02 06:24:06.844",
 
11                    "types": [
 
12                        "Item",
 
13                        "Computer",
 
14                        "Object",
 
15                        "DuoEthernetDevice",
 
16                        "EthernetDevice",
 
17                        "PowerConsumer",
 
18                        "MssControlable",
 
19                        "SpatialObject",
 
20                        "BaseObject"
 
21                    ],
 
22                    "dict": { "a": "b" },
 
23                    "users": [
 
24                        null,
 
25                        13,
 
26                        5
 
27                    ]
 
28                }
 
29            ]
 
 
 
'''Пример работы с подписками на селекторах:'''
 
 
 
1. Подписались на изменения загрузки процессора:
 
 
 
:1 firefly.WAMP.p_com_integra_open_topic({"$type": "PropertyEqualitySelector","name": "name","value": "cpu_usage"}).
 
 
 
:2    then(function(res) { console.log(res); }, function(res) { console.log(res); });
 
 
 
2. Нам вернётся имя темы на которую надо подписаться:
 
 
 
:1 firefly.session.subscribe('com.integra.selector_subscriptions.027004e8aed04834bf45bcda18ea2ccf', function(res) { console.log('test sub', res); } ).
 
 
 
:2    then(function(res) { console.log(res); }, function(res) { console.log(res); })
 
 
 
3. Поменяем что нибудь подходящее в базе. Нужно помнить, что изменения из базы больше не вычитываются и для тестов надо использовать apply_changes:
 
 
 
:1 firefly.WAMP.p_com_integra_apply_changes('76606d62-a514-11e4-8c37-a7064178f246', [{"id": "4b618576-ed74-413a-919d-a3e127cbe98f","name": "cpu_usage","value" : 77,"datetime": null,"dict": null}]).
 
 
 
:2    then(function(r) { console.log(r); },function(e) { console.log(e); })
 
 
 
4. В консоли должен появиться вывод test sub и далее данные.
 
 
 
==Описание структуры типов Интегра-Планета-4D==
 
 
 
===Формат описания типов элементов системы===
 
 
 
Типы элементов системы Интегра-Планета-4Д описываются на языке XML версии 1.0 с использованием utf-8 кодировки.
 
 
 
В xml документе могут присутствовать в произвольном количестве следующие теги:
 
 
 
*enum - описание перечисляемого типа параметра.
 
*item - описание устройства(объекта).
 
*pin - описание разъема устройства(объекта).
 
*link - описание соединения между разъемами.
 
*event - описание события.
 
 
 
Корневой элемент файла описания может называться произвольно (например root).
 
 
 
Любой тег может содержать дополнительные атрибуты доступные в режиме исполнения.
 
 
 
Дополнительный атрибут может иметь любое имя не совпадающее с именами служебных атрибутов описанных ниже.
 
 
 
Имена дополнительных атрибутов так же не могут совпадать с именами тегов.
 
 
 
===Описание Тегов===
 
 
 
'''1. is'''
 
 
 
:Теги enum, item, link, pin и event описывают конкретные элементы системы и их тела могут содержать произвольное количество тегов is, указывающих базовый тип элемента.
 
:Тег is может содержать следующие атрибуты:
 
::'''type''' - тип базового устройства. Обязательный атрибут.
 
:Наследуемый тип получает все значения, параметры и разъемы базового.
 
 
 
'''2. enum'''
 
 
 
Тег enum содержит следующие атрибуты:
 
::'''type '''- тип перечисления. Обязательный атрибут.
 
::'''assembly''' - имя сборки в которой определен данный тип (пространство имен должно быть строго acuario2.types). По умолчанию создает новый тип.
 
 
 
Тело тега enum содержит один или несколько тегов value, являющихся описанием конкретного значения перечисления.
 
 
 
Тело тега value содержит текстовое представление значения с которым связан данный элемент перечисления.
 
 
 
Так же тег value может содержать дополнительные атрибуты, например, в случае описания состояния устройства, следующие:
 
 
 
::'''color''' - цвет состояния (в html формате).
 
::'''image''' - плоское изображение состояния.
 
::'''model''' - 3D модель состояния.
 
::'''sound''' - звуковое обозначение состояния.
 
::'''hint''' - подсказка пользователю (может содержать URL HTML документа с подробным описанием действий оператора в случае наступления данного события).
 
 
 
Тег enum должен содержать один тег value не имеющий тела, который может содержать дополнительные атрибуты по умолчанию для всех значений не описанных в перечислении.
 
 
 
'''3. param'''
 
 
 
Теги item, link, pin и event описывают конкретные элементы системы и их тела могут содержать произвольное количество тегов param, описывающих параметры данного элемента.
 
:Тег '''param''' может содержать следующие атрибуты:
 
::'''type''' - тип параметра. Обязательный атрибут.
 
::'''ref''' - ссылка на другой элемент (uuid);
 
::'''bool''' - булево значение (bool);
 
::'''char''' - символ (char(1));
 
::'''int''' - целое знаковое число (int8);
 
::'''real''' - число с плавающей точкой (float8);
 
::'''guid''' - глобальный уникальный идентификатор (uuid);
 
::'''time''' - дата/время (timestamp);
 
::'''span''' - интервал времени (interval);
 
::'''bits''' - битовая строка (varbit);
 
::'''text''' - строка (text);
 
::'''ltree''' - ветка иерархического дерева (ltree);
 
::'''list''' - список строк (text[]);
 
::'''vector''' - список чисел с плавающей точкой (float8[]);
 
::'''blob''' - бинарные данные (bytea);
 
::'''hstore''' - словарь ключ/значение (hstore);
 
::'''json''' - документ типа json (json);
 
::'''xml''' - документ типа xml (xml);
 
::'''point''' - точка в пространстве (point);
 
::'''multipoint''' - множество точек (multipoint);
 
::'''polygon''' - полигон (polygon);
 
::'''multipolygon''' - множество полигонов (multipolygon);
 
::'''args''' - если связано с перечисляемым типом при помощи атрибута enum, то список уникальных значений этого перечисления, иначе просто список строк (text[]);
 
:'''name''' - имя параметра. Обязательный атрибут.
 
:'''enum''' - тип перечисления связанного с данным параметром.
 
:'''public''' - булево значение, помечающее параметр как доступный для внешних систем. См. тег item. По умолчанию считается равным false.
 
:'''editor''' - тип редактора для параметра (например acuario2.client.EgsCodeEditor,acuario2.editor). По умолчанию выбирается автоматически в соответствии с типом параметра.
 
:'''converter''' - тип конвертера для параметра (например acuario2.utils.UnixTimeConverter,acuario2.utils). По умолчанию выбирается автоматически в соответствии с типом параметра.
 
:'''unit''' - единица измерения (например second).
 
:'''typedef''' - имя параметра внутри данного типа содержащего описание json документа хранящегося в данном параметре. См. Dynamic TypeDef в конце документа.
 
 
 
Если тип параметра не указан то считается что это текстовый параметр.
 
 
 
Тело тега '''param''' может содержать текстовое представление значения поля по умолчанию.
 
 
 
Экземпляр элемента системы может содержать только одну копию одного и того же параметра.
 
 
 
Для совместимости с предыдущей версией параметр помеченный атрибутом many со значением '''true''' считается параметром типа '''list'''.
 
 
 
Имена параметров '''input''' и '''output''' являются частично зарезервированными и не должны использоваться при описании типов соединений.
 
 
 
Имена параметров '''state''' и '''stateargs''', так же является частично зарезервированными, но должны быть описаны для каждого типа устройства.
 
 
 
Состояние элемента определяется тремя параметрами:
 
 
 
'''state '''- визуальное состояние элемента. Всегда имеет тип '''ltree'''. Должно быть связано с перечисляемым типом при помощи атрибута '''enum'''.
 
 
 
'''stateargs''' - дополнительные состояния элемента. Всегда имеет тип '''args'''. Должно быть связано с перечисляемым типом при помощи атрибута '''enum'''.
 
 
 
 
 
'''4. pin'''
 
 
 
Тег pin может содержать следующие атрибуты:
 
 
 
:'''type''' - тип разъема. Обязательный атрибут.
 
:'''abstract''' - булево значение, помечающее тип как абстрактный. Т.е. запрещающий создание экземпляров такого типа. По умолчанию считается равным false.
 
:'''many''' - булево значение указывающее что из данного разъема может выходить несколько соединений. По умолчанию считается равным false.
 
:'''must''' - булево значение указывающее что данный разъем обязательно должен быть соединен. По умолчанию считается равным false.
 
:'''base '''- базовый тип элемента. По умолчанию Pin.
 
 
 
'''5. link'''
 
 
 
Тег link может содержать следующие атрибуты:
 
 
 
:'''type''' - тип соединения. Обязательный атрибут.
 
:'''abstract''' - булево значение, помечающее тип как абстрактный. Т.е. запрещающий создание экземпляров такого типа. По умолчанию считается равным false.
 
:'''in''' - тип входного разъема. Обязательный атрибут.
 
:'''out''' - тип выходного разъема. Обязательный атрибут.
 
:'''base''' - базовый тип элемента. По умолчанию Link.
 
 
 
'''6. item'''
 
 
 
Тег '''item''' может содержать следующие атрибуты:
 
 
 
::'''type''' - тип устройства. Обязательный атрибут.
 
::'''abstract''' - булево значение, помечающее тип как абстрактный. Т.е. запрещающий создание экземпляров такого типа. По умолчанию считается равным false.
 
::'''public''' - булево значение, помечающее тип как доступный для внешних систем. Т.е. указывает, что компилятор должен создать специальные типы в пространстве имен @public для использования их в качестве параметров soap веб-сервиса. По умолчанию считается равным false.
 
::'''base''' - базовый тип элемента. По умолчанию Item.
 
 
 
Тело тега '''item''' может содержать произвольное количество следующих тегов:
 
 
 
::'''pin''' - указывает тип разъема.
 
 
 
Тег pin может содержать следующие атрибуты:
 
 
 
::'''type''' - тип разъема. Обязательный атрибут.
 
::'''name''' - уникальное для устройства имя разъема. Используется для связывания с графическим отображением устройства. . Если для разъема не указано имя, то его имя совпадает с его типом.
 
::'''many''' - булево значение указывающее что из данного разъема может выходить несколько соединений. По умолчанию берется значение атрибута из базового класса.
 
::'''must''' - булево значение указывающее что данный разъем обязательно должен быть соединен. По умолчанию берется значение атрибута из базового класса.
 
::'''repeat''' - строковое значение задающее диапазон номеров имен дубликатов разъемов вида 1..8. Вместо такого разъема создаются его копии с добавлением к имени индекса из дипазона.
 
Внутренний для устройства разъем не может содержать дополнительных параметров.
 
 
 
'''7. event'''
 
 
 
Тег '''event''' может содержать следующие атрибуты:
 
 
 
::'''type''' - тип события. Обязательный атрибут.
 
::'''abstract''' - булево значение, помечающее тип как абстрактный. Т.е. запрещающий создание экземпляров такого типа. По умолчанию считается равным false.
 
::'''base''' - базовый тип элемента. По умолчанию Event.
 
 
 
===Замечания===
 
 
 
В процессе парсинга первая буква всех имен типов переводится в верхний регистр, а первая буква всех имен параметров и разъемов в нижний.
 
 
 
===Dynamic TypeDef===
 
 
 
Динамическое описание типа позволяет во время исполнения программы строить визуальные формы для редактирование некоторого набора параметров содержащихся в плоском json документе, который в свою очередь полностью содержится в одном обычном параметре.
 
 
 
Т.е. для Dynamic TypeDef необходимо два параметра внутри одного типа.
 
 
 
Например:
 
 
 
<item type="TestItem">
 
    <param name="settings" type="json" typedef="typedef" />
 
    <param name="typedef" type="xml"/>
 
</item>
 
 
 
Тип TestItem содержит параметр settings типа json описание к которому содержится в параметре typedef типа xml.
 
 
 
Dynamic TypeDef представляет собой подмножество основного языка TypeDef, в котором произвольный корневой элемент может содержать один или несколько тегов param со всеми описанными выше атрибутами, и таким образом описывает параметры плоского json документа.
 
 
 
Например если параметр typedef содержит:
 
 
 
<root>
 
    <param name="enabled" type="bool" />
 
    <param name="list" type="list" />
 
    <param name="timeout" type="int" unit="second">500</param>
 
</root>
 
 
 
Тогда параметр settings будет содержать json документ вида:
 
 
 
{
 
    enabled: false,
 
    list: null,
 
    timeout: 500
 
}
 
 
 
Отметим что данную технологию не следует использовать для расширения типа объектов динамическими параметрами, т.к. само описание динамического типа хранится так же в параметре конкретного (а не любого) экземпляра типа. Поэтому Dynamic TypeDef следует использовать только для расширения конкретного экземпляра типа, как например внутри триггеров EGS.
 
 
 
==Описание универсальных типов протокола передачи данных в интеграцию==
 
 
 
Передача данных об источниках данных  происходит по протоколу TCP/IP на транспортном уровне и по протоколу WAMP или SOAP на уровне приложения. В качестве контейнера передаваемой информации используется JSON (WAMP) и/или XML(SOAP).
 
 
 
Для защиты канала передачи информации должны использоваться аппаратные или программные средства, предоставляемые сетевой инфраструктурой или применяемыми операционными системами.
 
 
 
При передаче информации об источниках данных осуществляется передача следующих видов информации:
 
 
 
 
 
Нормализованные данные представляются в описании состояний устройств. Данный параметр каждого из типов представляет собой составную конструкцию вида:  <комплексное состояние>.<текущее состояние>
 
 
 
Комплексное состояние представлено 5 видами:
 
 
 
:'''ok''' – нормальное состояние устройства
 
:'''error''' – ошибочное состояние устройства
 
:'''undefined''' – неизвестное состояние устройства
 
:'''alarm''' – тревожное состояние устройства
 
:'''none''' – неопределенное состояние устройства
 
 
 
===Описание универсальных типов системы===
 
 
 
{| class="simple" border="1" style="text-align:center"
 
|+ style="background:#FFCC00"|'''Видеокамера'''
 
|Идентификатор устройства
 
|id
 
|type=text
 
|-
 
|Название устройства (имя)
 
|name
 
|type=text
 
|-
 
|Расположение(координаты)
 
|geo_position
 
|type=point 
 
|-
 
|Высота установки
 
|geo_height
 
|type=real
 
|-
 
|Обслуживающая организация
 
|organization
 
|type=text
 
|-
 
|Дополнительная информация
 
|additional_info
 
|type=text
 
|-
 
|Контролируемое время отзыва(мс)
 
|max_ping_time_ms
 
|type=int
 
|-
 
|Эхо-запрос,мс
 
|ping_time
 
|type=int
 
|-
 
|IP адрес
 
|ip
 
|type=text
 
|-
 
|Провайдер
 
|provider
 
|type=text
 
|-
 
|Дата ввода в эксплуатацию
 
|commisioning
 
|type=text
 
|-
 
|Дата последнего ТО/Номер акта
 
|lastMaintence
 
|type=text
 
|-
 
|Запланированная дата ТО
 
|plannedMaintence
 
|type=text
 
|-
 
|Период ТО
 
|maintencePeriod
 
|type=int
 
|-
 
|Состояние устройства
 
|state
 
|type=enum
 
|}
 
 
 
 
 
{| class="simple" border="1" style="text-align:center"
 
|+ style="background:#FFCC00"|'''Варианты состояния'''
 
|Норма
 
|ok.normal
 
|-
 
|Неисправность
 
|error.defective
 
|-
 
|Тревога
 
|alarm.alarm
 
|-
 
|Неизвестно
 
|none.unknown
 
|-
 
|Статус неизвестен
 
|none.stateUnknown
 
|-
 
|Текущие состояние
 
|stateargs
 
|type=Array(text)
 
|}
 
 
 
 
 
{| class="simple" border="1" style="text-align:center"
 
|+ style="background:#FFCC00"|'''Варианты состояния'''
 
|Распознано лицо
 
|ok.recognizedFace
 
|-
 
|Обнаружено лицо
 
|ok.detectFace
 
|-
 
|Пересечение линии в определенном направлении
 
|alarm.intersectionLineInPredeterminedDirection
 
|-
 
|Пересечение линии
 
|alarm.intersectionLine
 
|-
 
|Соединение с MSS разорвано
 
|alarm.mssDisconnected
 
|-
 
|DeviceManager подключен
 
|ok.dmConnected
 
|-
 
|Пожар
 
|alarm.fire
 
|-
 
|DeviceManager отключен
 
|alarm.dmDisconnected
 
|-
 
|Зафиксировано изменение фона
 
|alarm.backgroundChanged
 
|-
 
|Зафиксирована зона с  пониженной активностью
 
|alarm.lowActionInZone
 
|-
 
|Высокая активность в зоне
 
|alarm.highActionInZone
 
|-
 
|Реверс барьер
 
|alarm.reversBarrier
 
|-
 
|Диверсия
 
|alarm.sabotage
 
|-
 
|Подмена камеры
 
|alarm.cameraChange
 
|-
 
|Вскрытие корпуса
 
|alarm.openingTheCase
 
|-
 
|Тревожный звонок
 
|alarm.alarmCall
 
|-
 
|Зафиксированный объект обнаружен
 
|alarm.fixObjectOn
 
|-
 
|Зафиксированный объект потерян
 
|alarm.fixObjectLeft
 
|-
 
|Объект обнаружен
 
|alarm.objectOn
 
|-
 
|Объект потерян
 
|alarm.objectLeft
 
|-
 
|Обнаружены люди
 
|alarm.humansDetect
 
|-
 
|Обнаружен человек
 
|alarm.humanDetect
 
|-
 
|Нестандартное движение в зоне
 
|alarm.loitering
 
|-
 
|Нарушение маршрута
 
|alarm.breachRoute
 
|-
 
|Движение с повышенной скоростью
 
|alarm.aggressive
 
|-
 
|Люди в запрещенном месте
 
|alarm.prohibitedCrowd
 
|-
 
|Толпа людей в запрещенном месте
 
|alarm.crowdInProhibitedPlace
 
|-
 
|Зона выход
 
|alarm.zoneOut
 
|-
 
|Зона вход
 
|alarm.zoneIn
 
|-
 
|Нарушение периметра
 
|alarm.stile
 
|-
 
|Движение в зоне путей
 
|alarm.ways
 
|-
 
|Обнаружено задымление
 
|alarm.smokescreen
 
|-
 
|Зафиксирован автомобиль
 
|alarm.fixedDriveCar
 
|-
 
|Движение в зоне
 
|alarm.motionInZone
 
|-
 
|Заслон камеры
 
|alarm.barrier
 
|-
 
|Неактивный Неисправный
 
|error.inactiveDefective
 
|-
 
|Неисправен
 
|error.defectiveCam
 
|-
 
|Включен красный сигнал светофора
 
|ok.trafficLightRed
 
|-
 
|Включен желтый сигнал светофора
 
|ok.trafficLightYellow
 
|-
 
|Включен зеленый сигнал светофора
 
|ok.trafficLightGreen
 
|-
 
|Толпа
 
|ok.crowd
 
|-
 
|Засвет камеры
 
|ok.highlights
 
|-
 
|Нестабильно
 
|ok.notStabilized
 
|-
 
|Смещение камеры с домашней позиции
 
|ok.revers
 
|-
 
|Расфокусировка камеры
 
|ok.defocusing
 
|-
 
|Затемнение камеры
 
|ok.blackout
 
|-
 
|Отправление поезда
 
|ok.departureTrain
 
|-
 
|Прибытие поезда
 
|ok.arrivingTrain
 
|-
 
|Нет движения в зоне
 
|ok.noMovementInZone
 
|-
 
|Поезд в зоне
 
|ok.trainInZone
 
|-
 
|Датчик движения включен
 
|ok.motionDetectionOn
 
|-
 
|Датчик движения выключен
 
|ok.motionDetectionOff
 
|-
 
|Зона выход
 
|ok.zoneOut
 
|-
 
|Зона вход
 
|ok.zoneIn
 
|-
 
|Статус архива: ОШИБКА
 
|ok.archiveError
 
|-
 
|Статус архива: НОРМА
 
|ok.archiveNormal
 
|-
 
|Вращение
 
|ok.rotation
 
|-
 
|Восстановление сигнала
 
|error.flashing
 
|-
 
|Не под охраной
 
|ok.inactive
 
|-
 
|Ночной режим
 
|ok.grey
 
|-
 
|Дневной режим
 
|ok.color
 
|-
 
|Объект удален
 
|alarm.objectRemoved
 
|-
 
|Цель зафиксирована
 
|ok.targetFixed
 
|-
 
|Под охраной
 
|ok.active
 
|-
 
|Нормально
 
|ok.normalCam
 
|-
 
|Обновление состояния
 
|ok.stateUpdate
 
|-
 
|URL
 
|url
 
|}
 
 
 
 
 
 
 
Массив url камеры – основного потока
 
-Команды command type=enum
 
Варианты состояния:
 
- Снять с охраны deactivate
 
- Взять под охрану activate
 
 
 
-Угол обзора камеры fov  type=real
 
-Соотношение сторон aspectratio  type=real
 
-Глубина архива archieve_length type=real
 
 
 
ПО видеонаблюдения
 
 
 
-Состояние ПО state  type=enum
 
Варианты состояния:
 
-Норма ok.normal
 
-Неисправность error.defective
 
- Тревога alarm.alarm   
 
- Неизвестно none.unknown
 
 
 
-Время опроса refreshdelay  type=int
 
-Порт port  type=int
 
-IP адрес ip  type=text
 
 
 
Система оповещения
 
 
 
-Расположение(координаты) geo_position  type=point   
 
-Высота установки geo_height  type=real
 
-Обслуживающая организация organization type=text
 
-Дополнительная информация additional_info type=text
 
-Текущие состояние stateargs  type=enum
 
-Состояние устройства state  type=enum
 
Варианты состояния:
 
-Норма ok.normal
 
-Неисправность error.defective
 
- Тревога alarm.alarm   
 
- Неизвестно none.unknown
 
-Тревога перевода alarm.translation
 
-Тестовая тревога alarm.test
 
-Тревога сирена alarm.siren
 
 
 
-Рабочий диапазон effective_range  type=int
 
-Приоритет highestPriority  type=int
 
-Период обновления refreshMs  type=int
 
-Идентификатор устройства id  type=text
 
-Название устройства (имя)  name type=text
 
-Команды command type=enum
 
Варианты состояния:
 
-Остановить stop
 
-Сирена siren
 
-Тест test
 
-Файл для проигрывания fileToPlay  type=text
 
 
 
 
 
Охранная сигнализация датчик объема/пожарный датчик
 
 
 
-Идентификатор устройства id  type=text
 
-Название устройства (имя)  name type=text
 
-Расположение(координаты) geo_position  type=point   
 
-Высота установки geo_height  type=real
 
-Обслуживающая организация organization type=text
 
-Дополнительная информация additional_info type=text
 
-Идентификатор МСС mssGuid  type=text
 
-Провайдер provider  type=text
 
-Раздел part type=int
 
-Дата последнего ТО/Номер акта control_param  type=text
 
-Состояние устройства state  type=enum
 
Варианты состояния:
 
-Норма ok.normal
 
-Неисправность error.defective
 
- Тревога alarm.alarm   
 
- Неизвестно none.unknown
 
- Статус неизвестен none.stateUnknown
 
-Текущие состояние stateargs  type=Array(text)
 
Варианты состояния:
 
- Внимание блокировка alarm.blocked
 
- Выход за границы диапазона alarm.outOfRange
 
- Не под охраной ok.inactive
 
- Открыт ok.unlocked
 
- Разблокировано ok.unblocked
 
- Закрыт ok.locked
 
- Под охраной ok.active
 
-Тест ok.test
 
 
 
-Команды command type=enum
 
Варианты состояния:
 
- Снять с охраны deactivate
 
- Взять под охрану activate
 
 
 
 
 
Система контроля доступом датчик
 
 
 
-Идентификатор устройства id  type=text
 
-Название устройства (имя)  name type=text
 
-Расположение(координаты) geo_position  type=point   
 
-Высота установки geo_height  type=real
 
-Обслуживающая организация organization type=text
 
-Дополнительная информация additional_info type=text
 
-Идентификатор устройства devid type=text
 
- COM-порт comPort  type=text
 
- URL url type=list
 
- Идентификатор МСС mssGuid  type=text
 
- Минимальное альтернативное
 
напряжение alt_voltage_min type=real
 
- Максимальное альтернативное
 
напряжение alt_voltage_max type=real
 
- Минимальное напряжение voltage_min type=real
 
- Максимальное напряжение voltage_max type=real
 
- Минимально допустимая
 
температура, для тревог, гр. temperature_min type=real
 
- Максимально допустимая
 
температура, для тревог, гр. temperature_max type=real
 
- Альтернативное напряжение alt_voltage type=real
 
- Напряжение voltage type=real
 
- Температура temperature type=real
 
- Дата изготовления manufacturing_date type=text
 
- Тип считывателя reader_type type=text
 
- Память, кб memory_kb type=int
 
- Тип контроллера controller_type type=real
 
- Серийный номер serial type=real
 
- Параметр управления control_param  type=text
 
-Состояние устройства state  type=enum
 
Варианты состояния:
 
-Норма ok.normal
 
-Неисправность error.defective
 
- Тревога alarm.alarm   
 
- Неизвестно none.unknown
 
- Статус неизвестен none.stateUnknown
 
-Текущие состояние stateargs  type=Array(text)
 
Варианты состояния:
 
- Внимание блокировка alarm.blocked
 
- Выход за границы диапазона alarm.outOfRange
 
- Не под охраной ok.inactive
 
- Открыт ok.unlocked
 
- Разблокировано ok.unblocked
 
- Закрыт ok.locked
 
- Под охраной ok.active
 
-Выход ok.openOut
 
-Вход ok.openIn
 
 
 
-Команды command type=enum
 
Варианты состояния:
 
- Обновить refresh
 
- Нормализовать normalize
 
- Разблокировать unblock
 
- Заблокировать block
 
- Открыть выход open_out
 
- Открыть вход open_in
 
 
 
 
 
Система автоматической пожарной сигнализации
 
 
 
-Идентификатор устройства id  type=text
 
-Название устройства (имя)  name type=text
 
-Расположение(координаты) geo_position  type=point   
 
-Высота установки geo_height  type=real
 
-Обслуживающая организация organization type=text
 
-Дополнительная информация additional_info type=text
 
- Рабочий диапазон effective_range type=real
 
- Комментарий comment type=text
 
- Наивысший приоритет  highestPriority type=int
 
- Период обновления, мс refreshMs type=int
 
-Состояние устройства state  type=enum
 
Варианты состояния:
 
-Норма ok.normal
 
-Неисправность error.defective
 
- Тревога alarm.alarm   
 
- Неизвестно none.unknown
 
- Статус неизвестен none.stateUnknown
 
-Текущие состояние stateargs  type=Array(text)
 
Варианты состояния:
 
- Пожар alarm.fire
 
- Тест alarm.test
 
- Внимание блокировка alarm.blocked
 
- Выход за границы диапазона alarm.outOfRange
 
- Не под охраной ok.inactive
 
- Открыт ok.unlocked
 
- Разблокировано ok.unblocked
 
- Закрыт ok.locked
 
- Под охраной ok.active
 
 
 
-Команды command type=enum
 
Варианты состояния:
 
- Снять с охраны deactivate
 
- Взять под охрану activate
 
- Тест test
 
 
 
==Протокол работы с сервером приложения Интегра SOAP==
 
Протокол работы с сервером приложения Интегра-Планета-4Д
 
 
 
Анотация
 
Настоящий документ описывает порядок взаимодействия и формат информационно-технического обмена с системой Интегра-Планета-4Д.
 
Документ включает:
 
1) Описание протокола API взаимодействия;
 
2) Описание сервиса обмена данными и структуру передаваемых сообщений.
 
Взаимодействие между клиентом и сервером происходит по протоколу TCP/IP на транспортном уровне и по протоколу SOAP на уровне приложения, с использованием протокола HTTP для SOAP диалога. Отправитель SOAP-сообщения инициирует соединение на указанный владельцем противоположной стороны сервиса адрес, порт и URL, проходит авторизацию на центре авторизации, получая тикет, передает SOAP-сообщение и получает от противоположной стороны соответствующий SOAP-ответ с подтверждением получения или описанием ошибки (при сбое получения).
 
Для защиты канала передачи информации должны использоваться аппаратные или программные средства, предоставляемые сетевой инфраструктурой или применяемыми операционными системами.
 
 
 
WSDL
 
WSDL (Web Services Description Language) — это язык описания веб-сервисов, основанный на XML. На нем описываются методы, входные и результирующие структуры данных, типы данных, сетевые адреса для обращения к сервису и другое.
 
Описание API сервера приложения Интегра-Планета-4Д на WSDL описано в приложении 1.
 
 
 
Запросы в формате SOAP
 
Данные в формате SOAP передаются методом HTTP POST. Запросы отправляют на адрес API 
 
 
 
Таблица 1 Описание методов
 
Название метода
 
Описание метода
 
Обязательный
 
getTypeDef
 
Запрос на получение типов системы Интегра-Планета-4Д
 
Да
 
getServers
 
Запрос на получение списка объектов
 
Да
 
getGraph
 
Запрос на получение списка элементов объекта и параметров элементов
 
Нет
 
put
 
Запрос на создание, изменение, удаление данный на конкретном объекте
 
Нет
 
getRuntimeChanges
 
Запрос на получение изменений
 
Нет
 
 
 
 
 
Порядок работы с сервером приложении.
 
1. Авторизация и получение тикета на сервере авторизации
 
Для подключения к сервисам Интегра-Планета-4Д необходимо авторизоваться на сервере авторизации и получить тикет. Данный тикет используется для дальнейшей работы с сервером приложения.
 
Формат запроса:
 
https://<ip_адрес>:<порт>/getticket?login=<логин>&password=<пароль>&alias=TestAuth
 
Результатом ответа будет тикет в формате UUID, либо ошибка.
 
 
 
2. Выход из приложения
 
Для выхода из приложения и закрытия сессии необходимо выполнить выход из системы
 
Формат запроса:
 
https:// <ip_адрес>:<порт>/logout?ticket_id=<тикет>
 
 
 
3. Получение списка объектов
 
Для получения списка объектов необходимо вызвать метод  getServers
 
Параметры метода:
 
Нет входных параметров
 
Результат:
 
 
 
<?xml version="1.0" encoding="utf-8"?>
 
<ArrayOfKeyValueOfGuidServer xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://integra-s.com/firefly/soap">
 
  <KeyValueOfGuidServer>
 
    <Key>7c8cb3e5-130a-4438-8c9c-2ce795c82939</Key>
 
    <Value>
 
      <name>Local server</name>
 
      <typedef_version>0.0.0.16</typedef_version>
 
      <is_local>true</is_local>
 
    </Value>
 
  </KeyValueOfGuidServer>
 
  <KeyValueOfGuidServer>
 
    <Key>76606d62-a514-11e4-8c37-a7064178f246</Key>
 
    <Value>
 
      <name>Office server</name>
 
      <typedef_version>0.0.0.16</typedef_version>
 
      <is_local>false</is_local>
 
    </Value>
 
  </KeyValueOfGuidServer>
 
</ArrayOfKeyValueOfGuidServer>
 
Таблица 2 Описание ключевых полей запроса (getServers)
 
Поле
 
Состав данных (значение)
 
Формат
 
Key
 
Идентификатор объекта (сервера)
 
Текст (UUID)
 
name
 
Название (имя) объекта
 
Текст
 
typedef_version
 
Версия используемых типов
 
Текст
 
is_local
 
Признак ретрансляции сервера
 
Логический
 
 
 
 
 
4. Получение типов данных система Интегр-Планета-4Д
 
Для получения списка объектов необходимо вызвать метод  getTypeDef
 
Параметры метода:
 
Version – версия с которой поставлять типы – берется из описания сервера(объекта)
 
Описание типов системы предоставляется отдельным документом.
 
Пример описания типа системы Интегра-Планета-4Д
 
Таблица 3  Описание полей, типа Ip_Видео_Камера(IpVideoCamera)
 
Код поля
 
Описание поля
 
name
 
Название устройства (имя) 
 
id
 
Идентификатор устройства
 
geo_position
 
Расположение(координаты)
 
geo_height 
 
Высота установки
 
organization
 
Обслуживающая организация
 
additional_info
 
Дополнительная информация
 
max_ping_time_ms 
 
Контролируемое время отзыва(мс)
 
ping_time
 
Эхо-запрос,мс
 
ip
 
IP адрес
 
provider
 
Провайдер
 
commisioning
 
Дата ввода в эксплуатацию
 
lastMaintence
 
Дата последнего ТО/Номер акта
 
plannedMaintence
 
Запланированная дата ТО
 
maintencePeriod
 
Период ТО
 
state 
 
Состояние устройства
 
stateargs 
 
Текущие состояние
 
url
 
url
 
command
 
Команды
 
fov
 
Угол обзора камеры
 
aspectratio
 
Соотношение сторон
 
archieve_length
 
Глубина архива
 
 
 
 
 
5. Получение датчиков и их параметров
 
Для получения списка объектов необходимо вызвать метод.
 
Параметры метода:
 
serverId – идентификатор сервера
 
Результат:
 
<?xml version="1.0" encoding="utf-8"?>
 
<Graph xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://integra-s.com/firefly/soap">
 
  <ServerId>7c8cb3e5-130a-4438-8c9c-2ce795c82939</ServerId>
 
  <items>
 
    <KeyValueOfStringItem>
 
      <Key>c2fd1a94-3b54-4573-893f-6d4fefa2811c</Key>
 
      <Value>
 
        <types>
 
          <string>Item</string>
 
          <string>IncidentEvent</string>
 
          <string>BaseObject</string>
 
          <string>SpatialObject</string>
 
        </types>
 
        <params>
 
          <KeyValueOfStringParam>
 
            <Key>comment</Key>
 
            <Value>
 
              <value xsi:type="xsd:string">1231313</value>
 
              <datetime>1493377308</datetime>
 
              <version>17813</version>
 
            </Value>
 
          </KeyValueOfStringParam>
 
          <KeyValueOfStringParam>
 
            <Key>category</Key>
 
            <Value>
 
              <value xsi:type="xsd:string">falling</value>
 
              <datetime>1493377308</datetime>
 
              <version>17812</version>
 
            </Value>
 
          </KeyValueOfStringParam>
 
          <KeyValueOfStringParam>
 
            <Key>geo_height</Key>
 
            <Value>
 
              <datetime>1493377256</datetime>
 
              <version>9464</version>
 
            </Value>
 
          </KeyValueOfStringParam>
 
          <KeyValueOfStringParam>
 
            <Key>geo_position</Key>
 
            <Value>
 
              <datetime>1493377256</datetime>
 
              <version>9467</version>
 
            </Value>
 
          </KeyValueOfStringParam>
 
          <KeyValueOfStringParam>
 
            <Key>altitude</Key>
 
            <Value>
 
              <value xsi:type="xsd:long">-65535</value>
 
              <datetime>1493377308</datetime>
 
              <version>17811</version>
 
            </Value>
 
          </KeyValueOfStringParam>
 
          <KeyValueOfStringParam>
 
            <Key>stateargs</Key>
 
            <Value>
 
              <datetime>1493377256</datetime>
 
              <version>9481</version>
 
            </Value>
 
          </KeyValueOfStringParam>
 
          <KeyValueOfStringParam>
 
            <Key>name</Key>
 
            <Value>
 
              <datetime>1493377256</datetime>
 
              <version>9473</version>
 
            </Value>
 
          </KeyValueOfStringParam>
 
          <KeyValueOfStringParam>
 
            <Key>state</Key>
 
            <Value>
 
              <datetime>1493377256</datetime>
 
              <version>9479</version>
 
            </Value>
 
          </KeyValueOfStringParam>
 
          <KeyValueOfStringParam>
 
            <Key>position</Key>
 
            <Value>
 
              <value xsi:type="xsd:string">POINT(50.227 53.2371)</value>
 
              <datetime>1493377308</datetime>
 
              <version>17819</version>
 
            </Value>
 
          </KeyValueOfStringParam>
 
          <KeyValueOfStringParam>
 
            <Key>organization</Key>
 
            <Value>
 
              <datetime>1493377256</datetime>
 
              <version>9475</version>
 
            </Value>
 
          </KeyValueOfStringParam>
 
          <KeyValueOfStringParam>
 
            <Key>additional_info</Key>
 
            <Value>
 
              <datetime>1493377256</datetime>
 
              <version>9454</version>
 
            </Value>
 
          </KeyValueOfStringParam>
 
          <KeyValueOfStringParam>
 
            <Key>icon</Key>
 
            <Value>
 
              <value xsi:type="xsd:string">falling.png</value>
 
              <datetime>1493377308</datetime>
 
              <version>17816</version>
 
            </Value>
 
          </KeyValueOfStringParam>
 
        </params>
 
        <pins>
 
          <KeyValueOfStringPin>
 
            <Key>gpsContent</Key>
 
            <Value>
 
              <types>
 
                <string>Pin</string>
 
                <string>GpsProviderIn</string>
 
              </types>
 
              <params />
 
            </Value>
 
          </KeyValueOfStringPin>
 
          <KeyValueOfStringPin>
 
            <Key>person_input</Key>
 
            <Value>
 
              <types>
 
                <string>Pin</string>
 
                <string>Person_input</string>
 
              </types>
 
              <params />
 
            </Value>
 
          </KeyValueOfStringPin>
 
          <KeyValueOfStringPin>
 
            <Key>positionContent</Key>
 
            <Value>
 
              <types>
 
                <string>Pin</string>
 
                <string>PositionContent</string>
 
              </types>
 
              <params>
 
                <KeyValueOfStringParam>
 
                  <Key>location</Key>
 
                  <Value>
 
                    <datetime>1493377256</datetime>
 
                    <version>9499</version>
 
                  </Value>
 
                </KeyValueOfStringParam>
 
              </params>
 
            </Value>
 
          </KeyValueOfStringPin>
 
          <KeyValueOfStringPin>
 
            <Key>provoker_input</Key>
 
            <Value>
 
              <types>
 
                <string>Pin</string>
 
                <string>Provoker_input</string>
 
              </types>
 
              <params />
 
            </Value>
 
          </KeyValueOfStringPin>
 
        </pins>
 
      </Value>
 
    </KeyValueOfStringItem>
 
 </items>
 
</Graph>
 
 
 
6. Создание, изменение, удаление данных
 
Для получения списка объектов необходимо вызвать метод.
 
Формат параметров и результатов запроса приведены в отдельном документе
 
 
 
7. Получение изменений данных
 
Для получения списка объектов необходимо вызвать метод.
 
Параметры метода:
 
serverId – идентификатор сервера
 
version – версия с которой необходимо получать изменения
 
 
 
 
 
 
 
 
 
Приложение 1.
 
Описание сервиса обмена данными
 
<?xml version="1.0" encoding="utf-8"?>
 
<wsdl:definitions xmlns:s="http://www.w3.org/2001/XMLSchema"
 
      xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
 
      xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
 
      xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
 
      xmlns:tns="http://integra-s.com/firefly/soap" xmlns:s1="http://microsoft.com/wsdl/types/"
 
      xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
 
      xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
 
      xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
 
      targetNamespace="http://integra-s.com/firefly/soap"
 
      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
 
  <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Fire Fly Soap Web
 
        Service</wsdl:documentation>
 
  <wsdl:types>
 
    <s:schema elementFormDefault="qualified"
 
          targetNamespace="http://integra-s.com/firefly/soap">
 
      <s:import namespace="http://microsoft.com/wsdl/types/"/>
 
      <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
 
      <s:import namespace="http://schemas.xmlsoap.org/wsdl/"/>
 
      <s:element name="getServers">
 
        <s:complexType/>
 
      </s:element>
 
      <s:element name="getServersResponse">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="getServersResult"
 
                  type="tns:ArrayOfKeyValueOfGuidServer"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:complexType name="ArrayOfKeyValueOfGuidServer">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="unbounded" name="KeyValueOfGuidServer"
 
                nillable="true" type="tns:KeyValueOfGuidServer"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="KeyValueOfGuidServer">
 
        <s:sequence>
 
          <s:element minOccurs="1" maxOccurs="1" name="Key" type="s1:guid"/>
 
          <s:element minOccurs="0" maxOccurs="1" name="Value" type="tns:Server"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="Server">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="1" name="name" type="s:string"/>
 
          <s:element minOccurs="0" maxOccurs="1" name="typedef_version" type="s:string"/>
 
          <s:element minOccurs="1" maxOccurs="1" name="is_local" type="s:boolean"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:element name="CredentialsHeader" type="tns:CredentialsHeader"/>
 
      <s:complexType name="CredentialsHeader">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="1" name="username" type="s:string"/>
 
          <s:element minOccurs="0" maxOccurs="1" name="token" type="s:string"/>
 
        </s:sequence>
 
        <s:anyAttribute/>
 
      </s:complexType>
 
      <s:element name="getTypeDef">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="version" type="s:string"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="getTypeDefResponse">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="getTypeDefResult">
 
              <s:complexType mixed="true">
 
                <s:sequence>
 
                  <s:any/>
 
                </s:sequence>
 
              </s:complexType>
 
            </s:element>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="getGraph">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="1" maxOccurs="1" name="serverId" type="s1:guid"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="getGraphResponse">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="getGraphResult" type="tns:Graph"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:complexType name="Graph">
 
        <s:sequence>
 
          <s:element minOccurs="1" maxOccurs="1" name="ServerId" type="s1:guid"/>
 
          <s:element minOccurs="0" maxOccurs="1" name="items"
 
                type="tns:ArrayOfKeyValueOfStringItem"/>
 
          <s:element minOccurs="0" maxOccurs="1" name="links"
 
                type="tns:ArrayOfKeyValueOfStringLink"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="ArrayOfKeyValueOfStringItem">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="unbounded" name="KeyValueOfStringItem"
 
                nillable="true" type="tns:KeyValueOfStringItem"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="KeyValueOfStringItem">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="1" name="Key" type="s:string"/>
 
          <s:element minOccurs="0" maxOccurs="1" name="Value" type="tns:Item"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="Item">
 
        <s:complexContent mixed="false">
 
          <s:extension base="tns:Object">
 
            <s:sequence>
 
              <s:element minOccurs="0" maxOccurs="1" name="pins"
 
                    type="tns:ArrayOfKeyValueOfStringPin"/>
 
            </s:sequence>
 
          </s:extension>
 
        </s:complexContent>
 
      </s:complexType>
 
      <s:complexType name="Object">
 
        <s:complexContent mixed="false">
 
          <s:extension base="tns:AbstractObject"/>
 
        </s:complexContent>
 
      </s:complexType>
 
      <s:complexType name="AbstractObject">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="1" name="types" type="tns:ArrayOfString"/>
 
          <s:element minOccurs="0" maxOccurs="1" name="params"
 
                type="tns:ArrayOfKeyValueOfStringParam"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="ArrayOfString">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true"
 
                type="s:string"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="ArrayOfKeyValueOfStringParam">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="unbounded" name="KeyValueOfStringParam"
 
                nillable="true" type="tns:KeyValueOfStringParam"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="KeyValueOfStringParam">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="1" name="Key" type="s:string"/>
 
          <s:element minOccurs="0" maxOccurs="1" name="Value" type="tns:Param"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="Param">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="1" name="value"/>
 
          <s:element minOccurs="1" maxOccurs="1" name="datetime" type="s:int"/>
 
          <s:element minOccurs="0" maxOccurs="1" name="status" type="s:string"/>
 
          <s:element minOccurs="1" maxOccurs="1" name="version" type="s:long"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="Pin">
 
        <s:complexContent mixed="false">
 
          <s:extension base="tns:AbstractObject"/>
 
        </s:complexContent>
 
      </s:complexType>
 
      <s:complexType name="Link">
 
        <s:complexContent mixed="false">
 
          <s:extension base="tns:Object"/>
 
        </s:complexContent>
 
      </s:complexType>
 
      <s:complexType name="ArrayOfKeyValueOfStringPin">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="unbounded" name="KeyValueOfStringPin"
 
                nillable="true" type="tns:KeyValueOfStringPin"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="KeyValueOfStringPin">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="1" name="Key" type="s:string"/>
 
          <s:element minOccurs="0" maxOccurs="1" name="Value" type="tns:Pin"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="ArrayOfKeyValueOfStringLink">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="unbounded" name="KeyValueOfStringLink"
 
                nillable="true" type="tns:KeyValueOfStringLink"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="KeyValueOfStringLink">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="1" name="Key" type="s:string"/>
 
          <s:element minOccurs="0" maxOccurs="1" name="Value" type="tns:Link"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:element name="put">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="request" type="tns:ArrayOfPutRequest"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:complexType name="ArrayOfPutRequest">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="unbounded" name="PutRequest" nillable="true"
 
                type="tns:PutRequest"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="PutRequest">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="1" name="server" type="s:string"/>
 
          <s:element minOccurs="0" maxOccurs="1" name="owner" type="s:string"/>
 
          <s:element minOccurs="0" maxOccurs="1" name="id" type="s:string"/>
 
          <s:element minOccurs="0" maxOccurs="1" name="params"
 
                type="tns:ArrayOfKeyValueOfStringParam"/>
 
          <s:element minOccurs="1" maxOccurs="1" name="entity" type="tns:Entity"/>
 
          <s:element minOccurs="1" maxOccurs="1" name="operation" type="tns:Operation"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:simpleType name="Entity">
 
        <s:restriction base="s:string">
 
          <s:enumeration value="none"/>
 
          <s:enumeration value="server"/>
 
          <s:enumeration value="router"/>
 
          <s:enumeration value="item"/>
 
          <s:enumeration value="link"/>
 
          <s:enumeration value="pin"/>
 
          <s:enumeration value="event"/>
 
        </s:restriction>
 
      </s:simpleType>
 
      <s:simpleType name="Operation">
 
        <s:restriction base="s:string">
 
          <s:enumeration value="create"/>
 
          <s:enumeration value="update"/>
 
          <s:enumeration value="delete"/>
 
        </s:restriction>
 
      </s:simpleType>
 
      <s:complexType name="ArrayOfPutResponse">
 
        <s:sequence>
 
          <s:element minOccurs="0" maxOccurs="unbounded" name="PutResponse" nillable="true"
 
                type="tns:PutResponse"/>
 
        </s:sequence>
 
      </s:complexType>
 
      <s:complexType name="PutResponse">
 
        <s:complexContent mixed="false">
 
          <s:extension base="tns:Param">
 
            <s:sequence>
 
              <s:element minOccurs="0" maxOccurs="1" name="server" type="s:string"/>
 
              <s:element minOccurs="0" maxOccurs="1" name="name" type="s:string"/>
 
              <s:element minOccurs="0" maxOccurs="1" name="owner" type="s:string"/>
 
              <s:element minOccurs="1" maxOccurs="1" name="operation" type="tns:Operation"/>
 
              <s:element minOccurs="1" maxOccurs="1" name="entity" type="tns:Entity"/>
 
              <s:element minOccurs="0" maxOccurs="1" name="type" type="s:string"/>
 
              <s:element minOccurs="0" maxOccurs="1" name="id" type="s:string"/>
 
            </s:sequence>
 
          </s:extension>
 
        </s:complexContent>
 
      </s:complexType>
 
      <s:element name="putResponse">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="putResult"
 
                  type="tns:ArrayOfPutResponse"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="getRuntimeChanges">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="1" maxOccurs="1" name="serverId" type="s1:guid"/>
 
            <s:element minOccurs="1" maxOccurs="1" name="version" type="s:long"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="getRuntimeChangesResponse">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="getRuntimeChangesResult"
 
                  type="tns:ArrayOfPutResponse"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="getServersEx">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="username" type="s:string"/>
 
            <s:element minOccurs="0" maxOccurs="1" name="token" type="s:string"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="getServersExResponse">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="getServersExResult"
 
                  type="tns:ArrayOfKeyValueOfGuidServer"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="getTypeDefEx">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="username" type="s:string"/>
 
            <s:element minOccurs="0" maxOccurs="1" name="token" type="s:string"/>
 
            <s:element minOccurs="0" maxOccurs="1" name="version" type="s:string"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="getTypeDefExResponse">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="getTypeDefExResult">
 
              <s:complexType mixed="true">
 
                <s:sequence>
 
                  <s:any/>
 
                </s:sequence>
 
              </s:complexType>
 
            </s:element>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="getGraphEx">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="username" type="s:string"/>
 
            <s:element minOccurs="0" maxOccurs="1" name="token" type="s:string"/>
 
            <s:element minOccurs="0" maxOccurs="1" name="serverId" type="s:string"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="getGraphExResponse">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="getGraphExResult" type="tns:Graph"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="putEx">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="username" type="s:string"/>
 
            <s:element minOccurs="0" maxOccurs="1" name="token" type="s:string"/>
 
            <s:element minOccurs="0" maxOccurs="1" name="request" type="tns:ArrayOfPutRequest"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="putExResponse">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="putExResult"
 
                  type="tns:ArrayOfPutResponse"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="getRuntimeChangesEx">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="username" type="s:string"/>
 
            <s:element minOccurs="0" maxOccurs="1" name="token" type="s:string"/>
 
            <s:element minOccurs="0" maxOccurs="1" name="serverId" type="s:string"/>
 
            <s:element minOccurs="1" maxOccurs="1" name="version" type="s:long"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="getRuntimeChangesExResponse">
 
        <s:complexType>
 
          <s:sequence>
 
            <s:element minOccurs="0" maxOccurs="1" name="getRuntimeChangesExResult"
 
                  type="tns:ArrayOfPutResponse"/>
 
          </s:sequence>
 
        </s:complexType>
 
      </s:element>
 
      <s:element name="ArrayOfKeyValueOfGuidServer" nillable="true"
 
            type="tns:ArrayOfKeyValueOfGuidServer"/>
 
      <s:element name="Graph" nillable="true" type="tns:Graph"/>
 
      <s:element name="ArrayOfPutResponse" nillable="true" type="tns:ArrayOfPutResponse"/>
 
    </s:schema>
 
    <s:schema elementFormDefault="qualified" targetNamespace="http://microsoft.com/wsdl/types/">
 
      <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
 
      <s:import namespace="http://schemas.xmlsoap.org/wsdl/"/>
 
      <s:simpleType name="guid">
 
        <s:restriction base="s:string">
 
          <s:pattern
 
               
 
               
 
               
 
               
 
               
 
                value="[0-9a-fA-F]{8-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"}/>
 
        </s:restriction>
 
      </s:simpleType>
 
    </s:schema>
 
  </wsdl:types>
 
  <wsdl:message name="getServersSoapIn">
 
    <wsdl:part name="parameters" element="tns:getServers"/>
 
  </wsdl:message>
 
  <wsdl:message name="getServersSoapOut">
 
    <wsdl:part name="parameters" element="tns:getServersResponse"/>
 
  </wsdl:message>
 
  <wsdl:message name="getServersCredentialsHeader">
 
    <wsdl:part name="CredentialsHeader" element="tns:CredentialsHeader"/>
 
  </wsdl:message>
 
  <wsdl:message name="getTypeDefSoapIn">
 
    <wsdl:part name="parameters" element="tns:getTypeDef"/>
 
  </wsdl:message>
 
  <wsdl:message name="getTypeDefSoapOut">
 
    <wsdl:part name="parameters" element="tns:getTypeDefResponse"/>
 
  </wsdl:message>
 
  <wsdl:message name="getTypeDefCredentialsHeader">
 
    <wsdl:part name="CredentialsHeader" element="tns:CredentialsHeader"/>
 
  </wsdl:message>
 
  <wsdl:message name="getGraphSoapIn">
 
    <wsdl:part name="parameters" element="tns:getGraph"/>
 
  </wsdl:message>
 
  <wsdl:message name="getGraphSoapOut">
 
    <wsdl:part name="parameters" element="tns:getGraphResponse"/>
 
  </wsdl:message>
 
  <wsdl:message name="getGraphCredentialsHeader">
 
    <wsdl:part name="CredentialsHeader" element="tns:CredentialsHeader"/>
 
  </wsdl:message>
 
  <wsdl:message name="putSoapIn">
 
    <wsdl:part name="parameters" element="tns:put"/>
 
  </wsdl:message>
 
  <wsdl:message name="putSoapOut">
 
    <wsdl:part name="parameters" element="tns:putResponse"/>
 
  </wsdl:message>
 
  <wsdl:message name="putCredentialsHeader">
 
    <wsdl:part name="CredentialsHeader" element="tns:CredentialsHeader"/>
 
  </wsdl:message>
 
  <wsdl:message name="getRuntimeChangesSoapIn">
 
    <wsdl:part name="parameters" element="tns:getRuntimeChanges"/>
 
  </wsdl:message>
 
  <wsdl:message name="getRuntimeChangesSoapOut">
 
    <wsdl:part name="parameters" element="tns:getRuntimeChangesResponse"/>
 
  </wsdl:message>
 
  <wsdl:message name="getRuntimeChangesCredentialsHeader">
 
    <wsdl:part name="CredentialsHeader" element="tns:CredentialsHeader"/>
 
  </wsdl:message>
 
  <wsdl:message name="getServersExSoapIn">
 
    <wsdl:part name="parameters" element="tns:getServersEx"/>
 
  </wsdl:message>
 
  <wsdl:message name="getServersExSoapOut">
 
    <wsdl:part name="parameters" element="tns:getServersExResponse"/>
 
  </wsdl:message>
 
  <wsdl:message name="getTypeDefExSoapIn">
 
    <wsdl:part name="parameters" element="tns:getTypeDefEx"/>
 
  </wsdl:message>
 
  <wsdl:message name="getTypeDefExSoapOut">
 
    <wsdl:part name="parameters" element="tns:getTypeDefExResponse"/>
 
  </wsdl:message>
 
  <wsdl:message name="getGraphExSoapIn">
 
    <wsdl:part name="parameters" element="tns:getGraphEx"/>
 
  </wsdl:message>
 
  <wsdl:message name="getGraphExSoapOut">
 
    <wsdl:part name="parameters" element="tns:getGraphExResponse"/>
 
  </wsdl:message>
 
  <wsdl:message name="putExSoapIn">
 
    <wsdl:part name="parameters" element="tns:putEx"/>
 
  </wsdl:message>
 
  <wsdl:message name="putExSoapOut">
 
    <wsdl:part name="parameters" element="tns:putExResponse"/>
 
  </wsdl:message>
 
  <wsdl:message name="getRuntimeChangesExSoapIn">
 
    <wsdl:part name="parameters" element="tns:getRuntimeChangesEx"/>
 
  </wsdl:message>
 
  <wsdl:message name="getRuntimeChangesExSoapOut">
 
    <wsdl:part name="parameters" element="tns:getRuntimeChangesExResponse"/>
 
  </wsdl:message>
 
  <wsdl:message name="getServersHttpGetIn"/>
 
  <wsdl:message name="getServersHttpGetOut">
 
    <wsdl:part name="Body" element="tns:ArrayOfKeyValueOfGuidServer"/>
 
  </wsdl:message>
 
  <wsdl:message name="getTypeDefHttpGetIn">
 
    <wsdl:part name="version" type="s:string"/>
 
  </wsdl:message>
 
  <wsdl:message name="getTypeDefHttpGetOut">
 
    <wsdl:part name="Body"/>
 
  </wsdl:message>
 
  <wsdl:message name="getServersExHttpGetIn">
 
    <wsdl:part name="username" type="s:string"/>
 
    <wsdl:part name="token" type="s:string"/>
 
  </wsdl:message>
 
  <wsdl:message name="getServersExHttpGetOut">
 
    <wsdl:part name="Body" element="tns:ArrayOfKeyValueOfGuidServer"/>
 
  </wsdl:message>
 
  <wsdl:message name="getTypeDefExHttpGetIn">
 
    <wsdl:part name="username" type="s:string"/>
 
    <wsdl:part name="token" type="s:string"/>
 
    <wsdl:part name="version" type="s:string"/>
 
  </wsdl:message>
 
  <wsdl:message name="getTypeDefExHttpGetOut">
 
    <wsdl:part name="Body"/>
 
  </wsdl:message>
 
  <wsdl:message name="getGraphExHttpGetIn">
 
    <wsdl:part name="username" type="s:string"/>
 
    <wsdl:part name="token" type="s:string"/>
 
    <wsdl:part name="serverId" type="s:string"/>
 
  </wsdl:message>
 
  <wsdl:message name="getGraphExHttpGetOut">
 
    <wsdl:part name="Body" element="tns:Graph"/>
 
  </wsdl:message>
 
  <wsdl:message name="getRuntimeChangesExHttpGetIn">
 
    <wsdl:part name="username" type="s:string"/>
 
    <wsdl:part name="token" type="s:string"/>
 
    <wsdl:part name="serverId" type="s:string"/>
 
    <wsdl:part name="version" type="s:string"/>
 
  </wsdl:message>
 
  <wsdl:message name="getRuntimeChangesExHttpGetOut">
 
    <wsdl:part name="Body" element="tns:ArrayOfPutResponse"/>
 
  </wsdl:message>
 
  <wsdl:message name="getServersHttpPostIn"/>
 
  <wsdl:message name="getServersHttpPostOut">
 
    <wsdl:part name="Body" element="tns:ArrayOfKeyValueOfGuidServer"/>
 
  </wsdl:message>
 
  <wsdl:message name="getTypeDefHttpPostIn">
 
    <wsdl:part name="version" type="s:string"/>
 
  </wsdl:message>
 
  <wsdl:message name="getTypeDefHttpPostOut">
 
    <wsdl:part name="Body"/>
 
  </wsdl:message>
 
  <wsdl:message name="getServersExHttpPostIn">
 
    <wsdl:part name="username" type="s:string"/>
 
    <wsdl:part name="token" type="s:string"/>
 
  </wsdl:message>
 
  <wsdl:message name="getServersExHttpPostOut">
 
    <wsdl:part name="Body" element="tns:ArrayOfKeyValueOfGuidServer"/>
 
  </wsdl:message>
 
  <wsdl:message name="getTypeDefExHttpPostIn">
 
    <wsdl:part name="username" type="s:string"/>
 
    <wsdl:part name="token" type="s:string"/>
 
    <wsdl:part name="version" type="s:string"/>
 
  </wsdl:message>
 
  <wsdl:message name="getTypeDefExHttpPostOut">
 
    <wsdl:part name="Body"/>
 
  </wsdl:message>
 
  <wsdl:message name="getGraphExHttpPostIn">
 
    <wsdl:part name="username" type="s:string"/>
 
    <wsdl:part name="token" type="s:string"/>
 
    <wsdl:part name="serverId" type="s:string"/>
 
  </wsdl:message>
 
  <wsdl:message name="getGraphExHttpPostOut">
 
    <wsdl:part name="Body" element="tns:Graph"/>
 
  </wsdl:message>
 
  <wsdl:message name="getRuntimeChangesExHttpPostIn">
 
    <wsdl:part name="username" type="s:string"/>
 
    <wsdl:part name="token" type="s:string"/>
 
    <wsdl:part name="serverId" type="s:string"/>
 
    <wsdl:part name="version" type="s:string"/>
 
  </wsdl:message>
 
  <wsdl:message name="getRuntimeChangesExHttpPostOut">
 
    <wsdl:part name="Body" element="tns:ArrayOfPutResponse"/>
 
  </wsdl:message>
 
  <wsdl:portType name="FireFlySoapSoap">
 
    <wsdl:operation name="getServers">
 
      <wsdl:input message="tns:getServersSoapIn"/>
 
      <wsdl:output message="tns:getServersSoapOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getTypeDef">
 
      <wsdl:input message="tns:getTypeDefSoapIn"/>
 
      <wsdl:output message="tns:getTypeDefSoapOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getGraph">
 
      <wsdl:input message="tns:getGraphSoapIn"/>
 
      <wsdl:output message="tns:getGraphSoapOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="put">
 
      <wsdl:input message="tns:putSoapIn"/>
 
      <wsdl:output message="tns:putSoapOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getRuntimeChanges">
 
      <wsdl:input message="tns:getRuntimeChangesSoapIn"/>
 
      <wsdl:output message="tns:getRuntimeChangesSoapOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getServersEx">
 
      <wsdl:input message="tns:getServersExSoapIn"/>
 
      <wsdl:output message="tns:getServersExSoapOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getTypeDefEx">
 
      <wsdl:input message="tns:getTypeDefExSoapIn"/>
 
      <wsdl:output message="tns:getTypeDefExSoapOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getGraphEx">
 
      <wsdl:input message="tns:getGraphExSoapIn"/>
 
      <wsdl:output message="tns:getGraphExSoapOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="putEx">
 
      <wsdl:input message="tns:putExSoapIn"/>
 
      <wsdl:output message="tns:putExSoapOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getRuntimeChangesEx">
 
      <wsdl:input message="tns:getRuntimeChangesExSoapIn"/>
 
      <wsdl:output message="tns:getRuntimeChangesExSoapOut"/>
 
    </wsdl:operation>
 
  </wsdl:portType>
 
  <wsdl:portType name="FireFlySoapHttpGet">
 
    <wsdl:operation name="getServers">
 
      <wsdl:input message="tns:getServersHttpGetIn"/>
 
      <wsdl:output message="tns:getServersHttpGetOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getTypeDef">
 
      <wsdl:input message="tns:getTypeDefHttpGetIn"/>
 
      <wsdl:output message="tns:getTypeDefHttpGetOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getServersEx">
 
      <wsdl:input message="tns:getServersExHttpGetIn"/>
 
      <wsdl:output message="tns:getServersExHttpGetOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getTypeDefEx">
 
      <wsdl:input message="tns:getTypeDefExHttpGetIn"/>
 
      <wsdl:output message="tns:getTypeDefExHttpGetOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getGraphEx">
 
      <wsdl:input message="tns:getGraphExHttpGetIn"/>
 
      <wsdl:output message="tns:getGraphExHttpGetOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getRuntimeChangesEx">
 
      <wsdl:input message="tns:getRuntimeChangesExHttpGetIn"/>
 
      <wsdl:output message="tns:getRuntimeChangesExHttpGetOut"/>
 
    </wsdl:operation>
 
  </wsdl:portType>
 
  <wsdl:portType name="FireFlySoapHttpPost">
 
    <wsdl:operation name="getServers">
 
      <wsdl:input message="tns:getServersHttpPostIn"/>
 
      <wsdl:output message="tns:getServersHttpPostOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getTypeDef">
 
      <wsdl:input message="tns:getTypeDefHttpPostIn"/>
 
      <wsdl:output message="tns:getTypeDefHttpPostOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getServersEx">
 
      <wsdl:input message="tns:getServersExHttpPostIn"/>
 
      <wsdl:output message="tns:getServersExHttpPostOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getTypeDefEx">
 
      <wsdl:input message="tns:getTypeDefExHttpPostIn"/>
 
      <wsdl:output message="tns:getTypeDefExHttpPostOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getGraphEx">
 
      <wsdl:input message="tns:getGraphExHttpPostIn"/>
 
      <wsdl:output message="tns:getGraphExHttpPostOut"/>
 
    </wsdl:operation>
 
    <wsdl:operation name="getRuntimeChangesEx">
 
      <wsdl:input message="tns:getRuntimeChangesExHttpPostIn"/>
 
      <wsdl:output message="tns:getRuntimeChangesExHttpPostOut"/>
 
    </wsdl:operation>
 
  </wsdl:portType>
 
  <wsdl:binding name="FireFlySoapSoap" type="tns:FireFlySoapSoap">
 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
 
    <wsdl:operation name="getServers">
 
      <soap:operation soapAction="http://integra-s.com/firefly/soap/getServers"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap:body use="literal"/>
 
        <soap:header message="tns:getServersCredentialsHeader" part="CredentialsHeader"
 
              use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getTypeDef">
 
      <soap:operation soapAction="http://integra-s.com/firefly/soap/getTypeDef"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap:body use="literal"/>
 
        <soap:header message="tns:getTypeDefCredentialsHeader" part="CredentialsHeader"
 
              use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getGraph">
 
      <soap:operation soapAction="http://integra-s.com/firefly/soap/getGraph" style="document"/>
 
      <wsdl:input>
 
        <soap:body use="literal"/>
 
        <soap:header message="tns:getGraphCredentialsHeader" part="CredentialsHeader"
 
              use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="put">
 
      <soap:operation soapAction="http://integra-s.com/firefly/soap/put" style="document"/>
 
      <wsdl:input>
 
        <soap:body use="literal"/>
 
        <soap:header message="tns:putCredentialsHeader" part="CredentialsHeader" use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getRuntimeChanges">
 
      <soap:operation soapAction="http://integra-s.com/firefly/soap/getRuntimeChanges"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap:body use="literal"/>
 
        <soap:header message="tns:getRuntimeChangesCredentialsHeader" part="CredentialsHeader"
 
              use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getServersEx">
 
      <soap:operation soapAction="http://integra-s.com/firefly/soap/getServersEx"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap:body use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getTypeDefEx">
 
      <soap:operation soapAction="http://integra-s.com/firefly/soap/getTypeDefEx"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap:body use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getGraphEx">
 
      <soap:operation soapAction="http://integra-s.com/firefly/soap/getGraphEx"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap:body use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="putEx">
 
      <soap:operation soapAction="http://integra-s.com/firefly/soap/putEx" style="document"/>
 
      <wsdl:input>
 
        <soap:body use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getRuntimeChangesEx">
 
      <soap:operation soapAction="http://integra-s.com/firefly/soap/getRuntimeChangesEx"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap:body use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
  </wsdl:binding>
 
  <wsdl:binding name="FireFlySoapSoap12" type="tns:FireFlySoapSoap">
 
    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
 
    <wsdl:operation name="getServers">
 
      <soap12:operation soapAction="http://integra-s.com/firefly/soap/getServers"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap12:body use="literal"/>
 
        <soap12:header message="tns:getServersCredentialsHeader" part="CredentialsHeader"
 
              use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap12:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getTypeDef">
 
      <soap12:operation soapAction="http://integra-s.com/firefly/soap/getTypeDef"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap12:body use="literal"/>
 
        <soap12:header message="tns:getTypeDefCredentialsHeader" part="CredentialsHeader"
 
              use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap12:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getGraph">
 
      <soap12:operation soapAction="http://integra-s.com/firefly/soap/getGraph"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap12:body use="literal"/>
 
        <soap12:header message="tns:getGraphCredentialsHeader" part="CredentialsHeader"
 
              use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap12:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="put">
 
      <soap12:operation soapAction="http://integra-s.com/firefly/soap/put" style="document"/>
 
      <wsdl:input>
 
        <soap12:body use="literal"/>
 
        <soap12:header message="tns:putCredentialsHeader" part="CredentialsHeader"
 
              use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap12:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getRuntimeChanges">
 
      <soap12:operation soapAction="http://integra-s.com/firefly/soap/getRuntimeChanges"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap12:body use="literal"/>
 
        <soap12:header message="tns:getRuntimeChangesCredentialsHeader"
 
              part="CredentialsHeader" use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap12:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getServersEx">
 
      <soap12:operation soapAction="http://integra-s.com/firefly/soap/getServersEx"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap12:body use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap12:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getTypeDefEx">
 
      <soap12:operation soapAction="http://integra-s.com/firefly/soap/getTypeDefEx"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap12:body use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap12:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getGraphEx">
 
      <soap12:operation soapAction="http://integra-s.com/firefly/soap/getGraphEx"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap12:body use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap12:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="putEx">
 
      <soap12:operation soapAction="http://integra-s.com/firefly/soap/putEx" style="document"/>
 
      <wsdl:input>
 
        <soap12:body use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap12:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getRuntimeChangesEx">
 
      <soap12:operation soapAction="http://integra-s.com/firefly/soap/getRuntimeChangesEx"
 
            style="document"/>
 
      <wsdl:input>
 
        <soap12:body use="literal"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <soap12:body use="literal"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
  </wsdl:binding>
 
  <wsdl:binding name="FireFlySoapHttpGet" type="tns:FireFlySoapHttpGet">
 
    <http:binding verb="GET"/>
 
    <wsdl:operation name="getServers">
 
      <http:operation location="/getServers"/>
 
      <wsdl:input>
 
        <http:urlEncoded/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <mime:mimeXml part="Body"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getTypeDef">
 
      <http:operation location="/getTypeDef"/>
 
      <wsdl:input>
 
        <http:urlEncoded/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <mime:content part="Body" type="text/xml"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getServersEx">
 
      <http:operation location="/getServersEx"/>
 
      <wsdl:input>
 
        <http:urlEncoded/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <mime:mimeXml part="Body"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getTypeDefEx">
 
      <http:operation location="/getTypeDefEx"/>
 
      <wsdl:input>
 
        <http:urlEncoded/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <mime:content part="Body" type="text/xml"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getGraphEx">
 
      <http:operation location="/getGraphEx"/>
 
      <wsdl:input>
 
        <http:urlEncoded/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <mime:mimeXml part="Body"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getRuntimeChangesEx">
 
      <http:operation location="/getRuntimeChangesEx"/>
 
      <wsdl:input>
 
        <http:urlEncoded/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <mime:mimeXml part="Body"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
  </wsdl:binding>
 
  <wsdl:binding name="FireFlySoapHttpPost" type="tns:FireFlySoapHttpPost">
 
    <http:binding verb="POST"/>
 
    <wsdl:operation name="getServers">
 
      <http:operation location="/getServers"/>
 
      <wsdl:input>
 
        <mime:content type="application/x-www-form-urlencoded"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <mime:mimeXml part="Body"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getTypeDef">
 
      <http:operation location="/getTypeDef"/>
 
      <wsdl:input>
 
        <mime:content type="application/x-www-form-urlencoded"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <mime:content part="Body" type="text/xml"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getServersEx">
 
      <http:operation location="/getServersEx"/>
 
      <wsdl:input>
 
        <mime:content type="application/x-www-form-urlencoded"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <mime:mimeXml part="Body"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getTypeDefEx">
 
      <http:operation location="/getTypeDefEx"/>
 
      <wsdl:input>
 
        <mime:content type="application/x-www-form-urlencoded"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <mime:content part="Body" type="text/xml"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getGraphEx">
 
      <http:operation location="/getGraphEx"/>
 
      <wsdl:input>
 
        <mime:content type="application/x-www-form-urlencoded"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <mime:mimeXml part="Body"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
    <wsdl:operation name="getRuntimeChangesEx">
 
      <http:operation location="/getRuntimeChangesEx"/>
 
      <wsdl:input>
 
        <mime:content type="application/x-www-form-urlencoded"/>
 
      </wsdl:input>
 
      <wsdl:output>
 
        <mime:mimeXml part="Body"/>
 
      </wsdl:output>
 
    </wsdl:operation>
 
  </wsdl:binding>
 
  <wsdl:service name="FireFlySoap">
 
    <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Fire Fly Soap Web
 
          Service</wsdl:documentation>
 
    <wsdl:port name="FireFlySoapSoap" binding="tns:FireFlySoapSoap">
 
      <soap:address location="http://localhost:9000/FireFlySoap.asmx"/>
 
    </wsdl:port>
 
    <wsdl:port name="FireFlySoapSoap12" binding="tns:FireFlySoapSoap12">
 
      <soap12:address location="http://localhost:9000/FireFlySoap.asmx"/>
 
    </wsdl:port>
 
    <wsdl:port name="FireFlySoapHttpGet" binding="tns:FireFlySoapHttpGet">
 
      <http:address location="http://localhost:9000/FireFlySoap.asmx"/>
 
    </wsdl:port>
 
    <wsdl:port name="FireFlySoapHttpPost" binding="tns:FireFlySoapHttpPost">
 
      <http:address location="http://localhost:9000/FireFlySoap.asmx"/>
 
    </wsdl:port>
 
  </wsdl:service>
 
</wsdl:definitions>
 

Текущая версия на 14:02, 11 октября 2017

Архитектура сервера приложения


Описание подписок на основе селекторов


Описание структуры типов Интегра-Планета-4D


Описание универсальных типов протокола передачи данных в интеграцию


Протокол работы с сервером приложения Интегра SOAP