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

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

Наверх Форматы и договоренности<<< Загрузка и выгрузка модуля >>>Служебные сообщения