Навигация:
<< >> Оглавление Указатель

Приложения

Приложение А. Функции, константы и структуры RDS

А.5. Сервисные функции и макросы RDS

А.5.21. Сетевые функции

А.5.21.4. rdsNetSendData – передача данных конкретному блоку канала

Функция rdsNetSendData передает указанные данные конкретному блоку, установившему соединение с указанным каналом сервера.

    rdsNetSendDataA( 
    int ConnId,             // Идентификатор соединения
     Flags,            // Флаги (RDS_NETSEND_*)
    int Id,                 // Передаваемое целое (идентификатор)
     String,         // Передаваемая строка (UTF8)
     Buf,             // Передаваемая область памяти
     BufSize,          // Размер передаваемой области
     Station, // Сетевой идентификатор машины
     Block      // Сетевой идентификатор блока
  );
    rdsNetSendDataW( 
    int ConnId,             // Идентификатор соединения
     Flags,            // Флаги (RDS_NETSEND_*)
    int Id,                 // Передаваемое целое (идентификатор)
     String,        // Передаваемая строка (UTF16)
     Buf,             // Передаваемая область памяти
     BufSize,          // Размер передаваемой области
     Station, // Сетевой идентификатор машины
     Block      // Сетевой идентификатор блока
  );
  // 
    rdsNetSendData( 
    int ConnId,             // Идентификатор соединения
     Flags,            // Флаги (RDS_NETSEND_*)
    int Id,                 // Передаваемое целое (идентификатор)
     String,        // Передаваемая строка (кодировка по умолчанию)
     Buf,             // Передаваемая область памяти
     BufSize,          // Размер передаваемой области
     Station, // Сетевой идентификатор машины
     Block      // Сетевой идентификатор блока
  );

Тип указателя на эту функцию

RDS_BIDwISpVDwNsNb (для UTF8) или RDS_BIDwIWspVDwNsNb (для UTF16)

Параметры

ConnId (int)
Уникальный идентификатор сетевого соединения, через которое будут переданы данные.
Flags (DWORD)
Набор битовых флагов, управляющих передачей (те же, что и у функции rdsNetBroadcastData).
Id (int)
Передаваемое в канал целое число. При установленном в параметре Flags флаге RDS_NETSEND_UPDATE играет роль идентификатора передаваемых данных: устаревшие данные будут выброшены из очереди только в том случае, если их значение Id совпадает с Id в данном вызове.
String (RDSCSTR, RDSWCSTR, RDSXCSTR)
Указатель на передаваемую в канал строку. Если строку передавать не нужно, этот параметр может быть равен NULL.
Buf (LPVOID)
Указатель на начало передаваемой в канал области памяти с двоичными данными. Если двоичные данные передавать не нужно, этот параметр может быть равен NULL.
BufSize (DWORD)
Размер в байтах передаваемой области памяти по указателю Buf. При Buf==NULL значение этого параметра игнорируется.
Station (RDS_NETSTATION)
Уникальный сетевой идентификатор (RDS_NETSTATION) машины, на которой запущена копия RDS, в которую загружена схема, блоку которой отправляются данные.
Block (RDS_NETBLOCK)
Уникальный сетевой идентификатор (RDS_NETBLOCK) блока, которому отправляются данные. Этот идентификатор никак не связан с внутренним идентификатором этого блока RDS_BHANDLE.

Возвращаемое значение

TRUE – данные успешно поставлены в очередь на передачу, FALSE – ошибка (например, нет соединения с идентификатором ConnId).

Примечания

Эта функция используется для передачи целого числа Id, строки String и набора двоичных данных Buf конкретному блоку, подключившемуся к какому-либо каналу передачи данных сервера (принципы обмена данных по сети и каналы передачи данных подробно рассматриваются в §2.15.1 руководства программиста). В параметре ConnId передается идентификатор сетевого соединения с конкретным каналом конкретного сервера, полученный с помощью функций rdsNetConnect или rdsNetServer. Строку и двоичные данные передавать не обязательно – если они не нужны, соответствующим параметрам можно присвоить NULL.

Блок-получатель однозначно определяется парой параметров Station и Block: в первом передается идентификатор машины-получателя данных, во втором – идентификатор блока на этой машине. Эти специальные сетевые идентификаторы модель блока может узнать только из структуры RDS_NETRECEIVEDDATA, получив данные от этого блока. Таким образом, чтобы отправить данные какому-либо конкретному блоку, нужно сначала получить от него какие-либо данные. Функция rdsNetSendData в RDS предназначена для ответа на переданные данные: если какой-либо блок передает данные в канал функцией rdsNetBroadcastData, любой из принявших эти данные блоков может послать ответ непосредственно отправителю. Если логика работы схемы требует передачи данных какому-либо конкретному блоку на конкретной машине, для этого блока следует создать отдельный канал, в котором он будет единственным получателем. Число каналов передачи данных на сервере не ограничено.

В результате вызова rdsNetSendData данные, указанные в параметрах функции, ставятся в очередь для отправки на сервер. Сервер, получив эти данные, отправляет их на машину Station. После получения данных на этой машине модель блока Block будет вызвана для реакции на событие RDS_BFM_NETDATARECEIVED.

См. также

rdsNetConnect, rdsNetServer, rdsNetBroadcastData, RDS_BFM_NETDATARECEIVED, RDS_BFM_NETDATAACCEPTED.


<< >> Оглавление Указатель