ILoadBalancer::Marshal

Материал из CAMaaS preliminary wiki
Версия от 01:26, 18 декабря 2017; Андрей Чусов (обсуждение | вклад) (Новая страница: «{{NavBar|{{Системная иерархия:ILoadBalancer}} \ Marshal}} {{function_begin | return_code_t PLATFORM_NATIVE_CALLING_CONVENTION Marshal( const…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску
Компоненты на верхнем уровне \ Подсистема управления \ ILoadBalancer \ Marshal
 return_code_t PLATFORM_NATIVE_CALLING_CONVENTION Marshal(
    const char* pDomainName, size_type cchDomainName, std::uint32_t nFormat, IOutputStream* pOs) const noexcept;

Производит запись ссылки на балансировщик нагрузки в выходной поток IOutputStream.

Параметры
[in]pDomainNameСтроковой идентификатор экземпляра подсистемы предметной области, для которого осуществляется запись в поток. Строку не нужно завершать терминальным нулем.
cchDomainNameДлина строки pDomainName в байтах.
nFormatЗадает формат, по которому осуществляется в поток. Формат задается одной из констант перечисления DefinitionFormat:
Символическое имяЦелочисленное значениеОписание
DEFINED_AS_BINARY1Данные запакованы в двоичном виде. См. package.
DEFINED_AS_XML2Данные запакованы в XML виде. Не поддерживается.
[in]pOsПоток для записи ссылки на балансировщий.
Возвращаемое значение:
32-битовый беззнаковый целый код ошибки, который в случае успешного выполнения неотрицателен.
См. также
DemarshalLoadBalancerОсуществляет демаршаллинг ссылки на балансировщик нагрузки из потока чтения и возвращает реализацию интерфейса ILoadBalancer, адресующую балансировщик через прочитанную ссылку.

Формат данных, которые пишутся в выходной поток.

Если nFormat == DefinitionFormat::DEFINED_AS_BINARY, то:

для внутрипроцессной реализации балансировщика нагрузки
в поток pOs пишется значение LoadBalancerServerType::LoadBalancerIsInprocessServer, (4б), затем машинное слово с указателем на текущую реализацию ILoadBalancer;
для реализации TCP-сервером
в поток pOs пишется значение LoadBalancerServerType::LoadBalancerIsTCPServer (4б), затем 38-байтовый идентификатор балансировщика, затем длина адреса TCP-сервера, реализующего балансировщик, в байтах (4б), затем строковое выражение адреса сервера (UTF-8), далее порт (2б), далее размер UTF-8 строки с идентификатором экземпляра подсистемы предметной области, для которой существует текущая реализация ILoadBalancer, 4б, и далее этот идентификатор экземпляра подсистемы предметной области. Идентификатор балансировщика задается сервером CLoadBalancerProviderTCPClient.

Функция никогда не завладевает объектом pNode. При успешном завершении функции вызывающий должен самостоятельно увеличить счетчик ссылок на объект pNode.