Загрузка и выгрузка модуля — различия между версиями
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | [[Использование_COM_библиотеки_Oktell_из_других_приложений|Наверх]] | + | {|cellpadding="10" cellspacing="0" border="0" |
+ | | [[Использование_COM_библиотеки_Oktell_из_других_приложений|Наверх]] | ||
+ | | [[Форматы и договоренности|Форматы и договоренности<<<]] | ||
+ | | [[Загрузка и выгрузка модуля]] | ||
+ | | [[Служебные сообщения|>>>Служебные сообщения]] | ||
+ | |- | ||
+ | |} | ||
__TOC__ | __TOC__ | ||
Строка 29: | Строка 35: | ||
==Методы запуска и остановки платформы== | ==Методы запуска и остановки платформы== | ||
− | :*'''<span style="color:blue">void</span> ModuleStartAsync ( <span style="color:blue">string</span> login, <span style="color:blue">string</span> pass )'''. Метод старта асинхронной загрузки. Может быть вызван любое число раз. Внутри встроена проверка "один запуск - одна остановка". В некоторых случаях остановка производится автоматическая, тем самым устраняя необходимость дополнительно останавливать модуль, однако исключений лишние вызовы не повлекут. В момент асинхронного запуска приложение может ловить состояния по каналу события OnServiceMessage (описано здесь). В ходе подключения производится загрузка сборок, динамическое создание объекта платформы, поиск конфигурационных файлов и конфигурирование, проверка единичности запуска, осуществление и ожидание подключения к серверу по каналу TCP, логин, загрузка при необходимости модуля HAL поддержки локального устройства, создание других внутренних объектов, используемых в работе. Возникающие в ходе загрузки критические сбои передаются по каналу события OnError (описано здесь). При сбоях связанных с подключением к серверу, загрузчик находится в ожидании и циклических попытках снова подключиться. Прервать ожидание можно в любой момент вызовом метода выгрузки модуля. В случае неуспешного логина производится выход и выгрузка, если не стоит флаг AutoRetryLoad, который зациклит этап подключения до принудительного снятия флага либо командой выгрузки модуля. | + | :*'''<span style="color:blue">void</span> ModuleStartAsync ( <span style="color:blue">string</span> login, <span style="color:blue">string</span> pass )'''. Метод старта асинхронной загрузки. Может быть вызван любое число раз. Внутри встроена проверка "один запуск - одна остановка". В некоторых случаях остановка производится автоматическая, тем самым устраняя необходимость дополнительно останавливать модуль, однако исключений лишние вызовы не повлекут. В момент асинхронного запуска приложение может ловить состояния по каналу события <span style="color:darkred">OnServiceMessage</span> ([[Служебные_сообщения|описано здесь]]). В ходе подключения производится загрузка сборок, динамическое создание объекта платформы, поиск конфигурационных файлов и конфигурирование, проверка единичности запуска, осуществление и ожидание подключения к серверу по каналу TCP, логин, загрузка при необходимости модуля HAL поддержки локального устройства, создание других внутренних объектов, используемых в работе. Возникающие в ходе загрузки критические сбои передаются по каналу события <span style="color:darkred">OnError</span> ([[Исключительные ситуации|описано здесь]]). При сбоях связанных с подключением к серверу, загрузчик находится в ожидании и циклических попытках снова подключиться. Прервать ожидание можно в любой момент вызовом метода выгрузки модуля. В случае неуспешного логина производится выход и выгрузка, если не стоит флаг <span style="color:darkred">AutoRetryLoad</span>, который зациклит этап подключения до принудительного снятия флага либо командой выгрузки модуля. |
Возможен запуск нескольких экземпляров приложений в терминальном режиме. Подробнее об этом в описании метода SetConfigPath(). | Возможен запуск нескольких экземпляров приложений в терминальном режиме. Подробнее об этом в описании метода SetConfigPath(). | ||
− | :*'''<span style="color:blue">void</span> ModuleStop ( )'''. Метод синхронной остановки и выгрузки модуля. В ходе работы по каналам событий OnServiceMessage и OnError происходит информирование приложения о ходе и этапах выгрузки (описание здесь). | + | :*'''<span style="color:blue">void</span> ModuleStop ( )'''. Метод синхронной остановки и выгрузки модуля. В ходе работы по каналам событий <span style="color:darkred">OnServiceMessage</span> и <span style="color:darkred">OnError</span> происходит информирование приложения о ходе и этапах выгрузки ([[Служебные_сообщения|описание здесь]]). |
− | :*'''<span style="color:blue">void</span> ModuleStopAsync ( )'''. Метод асинхронной остановки и выгрузки модуля. В ходе работы по каналам событий OnServiceMessage и OnError происходит информирование приложения о ходе и этапах выгрузки (описание здесь). | + | :*'''<span style="color:blue">void</span> ModuleStopAsync ( )'''. Метод асинхронной остановки и выгрузки модуля. В ходе работы по каналам событий <span style="color:darkred">OnServiceMessage</span> и <span style="color:darkred">OnError</span> происходит информирование приложения о ходе и этапах выгрузки ([[Служебные_сообщения|описание здесь]]). |
Загрузив серверное приложение октелла в лог-журнале Service можно увидеть как сервер реагирует на логины, логоффы и управление каналом. | Загрузив серверное приложение октелла в лог-журнале Service можно увидеть как сервер реагирует на логины, логоффы и управление каналом. | ||
Строка 41: | Строка 47: | ||
При получении сервисного сообщения LiveUpdate (11104) необходимо осуществить замену всех сборок клиентского модуля oktell из каталога LiveUpdate, расположенного по умолчанию в одном каталоге со сборками. Иное может быть настроено файлом конфигурации. В этом случае необходимо воспользоваться методом ConfigGetLiveUpdateDir при получении | При получении сервисного сообщения LiveUpdate (11104) необходимо осуществить замену всех сборок клиентского модуля oktell из каталога LiveUpdate, расположенного по умолчанию в одном каталоге со сборками. Иное может быть настроено файлом конфигурации. В этом случае необходимо воспользоваться методом ConfigGetLiveUpdateDir при получении | ||
− | ВНИМАНИЕ! Во избежание блокировки (дедлока) запрещено вызывать метод ModuleStop в событийном потоке в ответ на поступающие события в ходе загрузки модуля, если заранее не выставлен режим асинхронного событийного взаимодействия. | + | <span style="color:red">ВНИМАНИЕ! Во избежание блокировки (дедлока) запрещено вызывать метод ModuleStop в событийном потоке в ответ на поступающие события в ходе загрузки модуля, если заранее не выставлен режим асинхронного событийного взаимодействия.</span> |
+ | |||
+ | {|cellpadding="10" cellspacing="0" border="0" | ||
+ | | [[Использование_COM_библиотеки_Oktell_из_других_приложений|Наверх]] | ||
+ | | [[Форматы и договоренности|Форматы и договоренности<<<]] | ||
+ | | [[Загрузка и выгрузка модуля]] | ||
+ | | [[Служебные сообщения|>>>Служебные сообщения]] | ||
+ | |- | ||
+ | |} |
Текущая версия на 10:32, 1 апреля 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 в событийном потоке в ответ на поступающие события в ходе загрузки модуля, если заранее не выставлен режим асинхронного событийного взаимодействия.
Наверх | Форматы и договоренности<<< | Загрузка и выгрузка модуля | >>>Служебные сообщения |