Приложения
Приложение А. Функции, константы и структуры RDS
А.5. Сервисные функции и макросы RDS
А.5.21. Сетевые функции
Описываются функции, позволяющие моделям блоков обмениваться данными по сети со схемами, загруженными в RDS на других машинах (см. §2.15 руководства программиста).
А.5.21.1. rdsNetBroadcastData – передача данных всем блокам канала
Функция rdsNetBroadcastData передает указанные данные всем блокам, установившим соединение с указанным каналом сервера.
BOOL RDSCALL rdsNetBroadcastDataA( int ConnId, // Идентификатор соединения DWORD Flags, // Флаги (RDS_NETSEND_*) int Id, // Передаваемое целое (идентификатор) RDSCSTR String, // Передаваемая строка (UTF8) LPVOID Buf, // Передаваемая область памяти DWORD BufSize // Размер передаваемой области ); BOOL RDSCALL rdsNetBroadcastDataW( int ConnId, // Идентификатор соединения DWORD Flags, // Флаги (RDS_NETSEND_*) int Id, // Передаваемое целое (идентификатор) RDSWCSTR String, // Передаваемая строка (UTF16) LPVOID Buf, // Передаваемая область памяти DWORD BufSize // Размер передаваемой области ); // Функция-псевдоним BOOL RDSCALL rdsNetBroadcastData( int ConnId, // Идентификатор соединения DWORD Flags, // Флаги (RDS_NETSEND_*) int Id, // Передаваемое целое (идентификатор) RDSXCSTR String, // Передаваемая строка (кодировка по умолчанию) LPVOID Buf, // Передаваемая область памяти DWORD BufSize // Размер передаваемой области );
Тип указателя на эту функцию
RDS_BIDwISpVDw (для UTF8) или RDS_BIDwIWspVDw (для UTF16)
Параметры
- ConnId (int)
- Уникальный идентификатор сетевого соединения, через которое будут переданы данные.
- Flags (DWORD)
- Набор битовых флагов, управляющих передачей:
RDS_NETSEND_NOWAIT После передачи данных RDS не будет ждать ответа от сервера перед передачей следующей порции данных (ожидание снижает нагрузку на сеть, но уменьшает скорость передачи). RDS_NETSEND_SERVREPLY Получив эти данные, сервер должен ответить передавшему блоку – модель блока будет вызвана для реакции на событие RDS_BFM_NETDATAACCEPTED). RDS_NETSEND_UDP Передавать данные по протоколу UDP, если это разрешено настройками RDS (по умолчанию данные передаются по протоколу TCP). RDS_NETSEND_UPDATE Если в очереди на отправку данных уже есть данные, отправленные тем же блоком в тот же канал с тем же значением Id (см. ниже), старые данные будут выброшены из очереди. - Id (int)
- Передаваемое в канал целое число. При установленном в параметре Flags флаге RDS_NETSEND_UPDATE играет роль идентификатора передаваемых данных: устаревшие данные будут выброшены из очереди только в том случае, если их значение Id совпадает с Id в данном вызове.
- String (RDSCSTR, RDSWCSTR, RDSXCSTR)
- Указатель на передаваемую в канал строку. Если строку передавать не нужно, этот параметр может быть равен NULL.
- Buf (LPVOID)
- Указатель на начало передаваемой в канал области памяти с двоичными данными. Если двоичные данные передавать не нужно, этот параметр может быть равен NULL.
- BufSize (DWORD)
- Размер в байтах передаваемой области памяти по указателю Buf. При Buf==NULL значение этого параметра игнорируется.
Возвращаемое значение
TRUE – данные успешно поставлены в очередь на передачу, FALSE – ошибка (например, нет соединения с идентификатором ConnId).
Примечания
Эта функция используется для передачи целого числа Id, строки String и набора двоичных данных Buf всем блокам, подключившимся к какому-либо каналу передачи данных сервера (принципы обмена данных по сети и каналы передачи данных подробно рассматриваются в §2.15.1 руководства программиста). В параметре ConnId передается идентификатор сетевого соединения с конкретным каналом конкретного сервера, полученный с помощью функций rdsNetConnect или rdsNetServer. Строку и двоичные данные передавать не обязательно – если они не нужны, соответствующим параметрам можно присвоить NULL.
В результате вызова этой функции данные, указанные в ее параметрах, ставятся в очередь для отправки на сервер. Сервер, получив эти данные, отправляет их всем блокам, подписавшимся на прием данных из канала, соответствующего соединению ConnId. После получения данных модели этих блоков вызываются для реакции на событие RDS_BFM_NETDATARECEIVED и в них передаются принятое целое число, строка и набор двоичных данных.
Помимо указанных в параметрах функции данных на сервер также передается идентификатор блока-отправителя (блока, из модели которого вызвана rdsNetBroadcastData), чтобы любой из блоков-получателей, при необходимости, мог в ответ вызовом rdsNetSendData передать данные непосредственно отправителю, а не всем блокам канала.
Пример
Пример использования функции rdsNetBroadcastData приведен в §2.15.2 руководства программиста.
См. также
rdsNetConnect, rdsNetServer, rdsNetSendData, RDS_BFM_NETDATARECEIVED, RDS_BFM_NETDATAACCEPTED.