MarshalNode

Материал из CAMaaS preliminary wiki
Версия от 23:57, 17 декабря 2017; Андрей Чусов (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску
return_code_t PLATFORM_NATIVE_CALLING_CONVENTION MarshalNode(
    const INode* pNode, 
    const char* pDomainName,
    size_type cchDomainName, 
    std::uint32_t nFormat,
    IOutputStream* pOs) noexcept;

Осуществляет запись в выходной поток ссылки на внутрипроцессный или удаленный вычислительный узел INode.

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

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

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

для внутрипроцессной реализации узла
в поток pOs пишется значение NodeServerType::NodeIsInprocessServer, (4б), затем машинное слово с указателем на реализацию INode, равным pNode;
для реализации узла TCP-сервером
в поток pOs пишется значение NodeServerType::NodeIsTCPServer (4б), затем длина адреса TCP-сервера, реализующего узел, (4б), затем строковое выражение адреса сервера (UTF-8) и далее порт (2б).

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