Загрузка и выгрузка модуля — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
(Новая страница: «Наверх __TOC__ ==Служебные методы== О...»)
(нет различий)

Версия 07:54, 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 в событийном потоке в ответ на поступающие события в ходе загрузки модуля, если заранее не выставлен режим асинхронного событийного взаимодействия.