Текущий раздел:

Описания RDS

Приложения

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

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

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

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

# Приложения

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

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

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

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

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

      BOOL RDSCALL rdsNetSendDataA(
        int ConnId,             // Идентификатор соединения
        DWORD Flags,            // Флаги (RDS_NETSEND_*)
        int Id,                 // Передаваемое целое (идентификатор)
        RDSCSTR String,         // Передаваемая строка (UTF8)
        LPVOID Buf,             // Передаваемая область памяти
        DWORD BufSize,          // Размер передаваемой области
        RDS_NETSTATION Station, // Сетевой идентификатор машины
        RDS_NETBLOCK Block      // Сетевой идентификатор блока
      );
      BOOL RDSCALL rdsNetSendDataW(
        int ConnId,             // Идентификатор соединения
        DWORD Flags,            // Флаги (RDS_NETSEND_*)
        int Id,                 // Передаваемое целое (идентификатор)
        RDSWCSTR String,        // Передаваемая строка (UTF16)
        LPVOID Buf,             // Передаваемая область памяти
        DWORD BufSize,          // Размер передаваемой области
        RDS_NETSTATION Station, // Сетевой идентификатор машины
        RDS_NETBLOCK Block      // Сетевой идентификатор блока
      );
      // Функция-псевдоним
      BOOL RDSCALL rdsNetSendData(
        int ConnId,             // Идентификатор соединения
        DWORD Flags,            // Флаги (RDS_NETSEND_*)
        int Id,                 // Передаваемое целое (идентификатор)
        RDSXCSTR String,        // Передаваемая строка (кодировка по умолчанию)
        LPVOID Buf,             // Передаваемая область памяти
        DWORD BufSize,          // Размер передаваемой области
        RDS_NETSTATION Station, // Сетевой идентификатор машины
        RDS_NETBLOCK 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.