MarshalNode: различия между версиями

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
 
(не показана 1 промежуточная версия этого же участника)
Строка 13: Строка 13:
{{function_paramlist end}}
{{function_paramlist end}}
{{function_return_value|32-битовый целый код ошибки, который неотрицателен при успешности операции.}}
{{function_return_value|32-битовый целый код ошибки, который неотрицателен при успешности операции.}}
{{function sa begin}}
{{function sa add|[[DemarshalNode]]|{{DemarshalNode brief}}}}
{{function sa end}}
{{function_end}}
{{function_end}}
'''Формат данных, которые пишутся в выходной поток.'''
Если <source lang="cpp" inline>nFormat == DefinitionFormat::DEFINED_AS_BINARY</source>, то:
;для внутрипроцессной реализации узла
:в поток <tt>pOs</tt> пишется значение <source lang="cpp" inline>NodeServerType::NodeIsInprocessServer</source>, (4б), затем машинное слово с указателем на реализацию [[INode]], равным <tt>pNode</tt>;
;для реализации узла TCP-сервером
:в поток <tt>pOs</tt> пишется значение <source lang="cpp" inline>NodeServerType::NodeIsTCPServer</source> (4б), затем длина адреса TCP-сервера, реализующего узел, (4б), затем строковое выражение адреса сервера (UTF-8) и далее порт (2б).
''Функция никогда не завладевает объектом <tt>pNode</tt>. При успешном завершении функции вызывающий должен самостоятельно увеличить счетчик ссылок на объект <tt>pNode</tt>.''

Текущая версия на 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.