Загрузка и выгрузка модуля — различия между версиями
Строка 15: | Строка 15: | ||
:*'''<span style="color:blue">void</span> SetXmlEncoding ( <span style="color:blue">int</span> newvalue )'''. Устанавливает текущую кодировку для формирования и парсинга XML. По умолчанию используется Unicode (UTF-16). Параметр int определяет индекс требуемой кодировки в списке возможных вариантов: | :*'''<span style="color:blue">void</span> SetXmlEncoding ( <span style="color:blue">int</span> newvalue )'''. Устанавливает текущую кодировку для формирования и парсинга XML. По умолчанию используется Unicode (UTF-16). Параметр int определяет индекс требуемой кодировки в списке возможных вариантов: | ||
− | + | Default = 0 | |
ASCII = 1 | ASCII = 1 | ||
BigEndianUnicode = 2 | BigEndianUnicode = 2 |
Версия 07:58, 19 марта 2014
Служебные методы
Объект прослойки создается при первом запуске. До или после старта и вообще в ходе работы модуля есть возможность использовать сервисные функции установки параметров работы. Этот список будет пополняться. В данный момент среди служебных функций:
- void SetAsyncEventing ( bool newvalue ). Устанавливает режим событийного оповещения - асинхронный режим/синхронный режим. По умолчанию FALSE - синхронный режим. Все методы, которые в любом случае должны быть асинхронными, платформа делает асинхронными независимо от установки режима.
- void SetXmlLogging ( bool newvalue ). Устанавливает/выключает режим полного логирования всех передаваемых и получаемых параметров в виде XML в текущий CommonLog. По умолчанию пока TRUE. Используется для отладки. При передаче параметра он сначала логируется (c заголовком XML IN), а потом парсится. Выходные значения сначала формируются, а на выходе логируются (с заголовком XML OUT).
- void SetAutoRetryLoad ( bool newvalue ). Устанавливает/снимает режим автопереподключения в случае неудач связанных с коннектом (после прохождения проверок, загрузок, конфигурации и других не связанных с откликами сервера этапов). Может быть снято/поставлено в любое время. Приложение при этом остается подключенным. Однако в случае временных подписок (например изменения состояний объектов номерного плана) после загрузки они не восстанавливаются. Помогает в случаях недолговременных сбоев в сети, при запросах сервера на перезапуск приложения. Но в случаях неверной конфигурации, пароля подключения, обновления - приложение должно самостоятельно останавливать модуль (либо специальным методом выгрузки, либо снятием флага - разница только на этапе корректной работы в подключенном состоянии).
- void SetXmlEncoding ( int newvalue ). Устанавливает текущую кодировку для формирования и парсинга XML. По умолчанию используется Unicode (UTF-16). Параметр int определяет индекс требуемой кодировки в списке возможных вариантов:
Default = 0 ASCII = 1 BigEndianUnicode = 2 UTF7 = 3 UTF8 = 4 UTF16 = 5
- void SetConfigPath ( string path ). Устанавливает явно путь к конфигурационному файлу ядра, который будет использован в случае его обнаружения. В противном случае поиск будет осуществляться в каталоге запускающего приложения и в каталоге, где зарегистрирован COM-объект. Имена файлов при поиске по умолчанию: oktell.clientstarter.exe.config, oktell.clientbaselib.dll.config, app.config, [имя стартового файла].config. Явное указание файла может потребоваться для реализации массового запуска приложений в терминальном режиме. Каждый из конфигурационных файлов устанавливает терминальный ключ, который должен отличаться у всех экземпляров, а также рабочую папку, в которой ядро будет осуществлять логирование, размещение временных файлов. Каждый из запускаемых экземпляров должен иметь уникальную рабочую папку. Сложности в случае терминального режима могут возникнуть только с обновлением комплекса. Каждый из запускаемых экземпляров будет в случае необходимости пытаться обновить ядро. Необходимо гарантировать запуск только одной копии при обновлении.
Все методы COM-класса ThreadSafe.
Методы запуска и остановки платформы
- void ModuleStartAsync ( string login, string pass ). Метод старта асинхронной загрузки. Может быть вызван любое число раз. Внутри встроена проверка "один запуск - одна остановка". В некоторых случаях остановка производится автоматическая, тем самым устраняя необходимость дополнительно останавливать модуль, однако исключений лишние вызовы не повлекут. В момент асинхронного запуска приложение может ловить состояния по каналу события OnServiceMessage (описано здесь). В ходе подключения производится загрузка сборок, динамическое создание объекта платформы, поиск конфигурационных файлов и конфигурирование, проверка единичности запуска, осуществление и ожидание подключения к серверу по каналу TCP, логин, загрузка при необходимости модуля HAL поддержки локального устройства, создание других внутренних объектов, используемых в работе. Возникающие в ходе загрузки критические сбои передаются по каналу события OnError (описано здесь). При сбоях связанных с подключением к серверу, загрузчик находится в ожидании и циклических попытках снова подключиться. Прервать ожидание можно в любой момент вызовом метода выгрузки модуля. В случае неуспешного логина производится выход и выгрузка, если не стоит флаг AutoRetryLoad, который зациклит этап подключения до принудительного снятия флага либо командой выгрузки модуля.
Возможен запуск нескольких экземпляров приложений в терминальном режиме. Подробнее об этом в описании метода SetConfigPath().
- void ModuleStop ( ). Метод синхронной остановки и выгрузки модуля. В ходе работы по каналам событий OnServiceMessage и OnError происходит информирование приложения о ходе и этапах выгрузки (описание здесь).
- void ModuleStopAsync ( ). Метод асинхронной остановки и выгрузки модуля. В ходе работы по каналам событий OnServiceMessage и OnError происходит информирование приложения о ходе и этапах выгрузки (описание здесь).
Загрузив серверное приложение октелла в лог-журнале Service можно увидеть как сервер реагирует на логины, логоффы и управление каналом.
При получении сервисного сообщения LiveUpdate (11104) необходимо осуществить замену всех сборок клиентского модуля oktell из каталога LiveUpdate, расположенного по умолчанию в одном каталоге со сборками. Иное может быть настроено файлом конфигурации. В этом случае необходимо воспользоваться методом ConfigGetLiveUpdateDir при получении
ВНИМАНИЕ! Во избежание блокировки (дедлока) запрещено вызывать метод ModuleStop в событийном потоке в ответ на поступающие события в ходе загрузки модуля, если заранее не выставлен режим асинхронного событийного взаимодействия.