Приложения
Приложение А. Функции, константы и структуры 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.