Приложения
Приложение А. Функции, константы и структуры RDS
А.2. События блока и связанные с ними описания
А.2.8. События обмена данными по сети
А.2.8.3. RDS_BFM_NETDATARECEIVED – получение данных блоком
Поток, в котором вызывается функция модели
Главный поток RDS.
Первый параметр функции модели (int CallMode)
Константа RDS_BFM_NETDATARECEIVED.
Третий параметр функции модели (void *ExtParam)
Указатель на структуру RDS_NETRECEIVEDDATA, содержащую информацию о принятых данных и указатели на них.
Возвращаемое функцией модели значение
Не используется, можно возвращать любое значение.
Примечания
Реакция на событие RDS_BFM_NETDATARECEIVED вызывается у блока, для которого поступили данные с сервера. Для того, чтобы принимать данные по сети, блок должен сначала вызовом rdsNetConnect установить соединение с конкретным каналом передачи данных конкретного сервера, и указать при этом, что он будет получать данные из этого канала. Процедуры обмена данными по сети, используемые в RDS, подробно описаны в §2.15 руководства программиста.
В параметре ExtParam передается указатель на структуру RDS_NETRECEIVEDDATA:
typedef struct { RDSINT32 ConnId; // Идентификатор соединения RDSCSTR HostA; // URL или IP-адрес сервера (UTF8) RDSWCSTR HostW; // URL или IP-адрес сервера (UTF16) //RDSXCSTR Host; // URL или IP-адрес сервера (поле-псевдоним) RDSINT32 Port; // Порт RDSCSTR ChannelA; // Имя канала (UTF8) RDSWCSTR ChannelW; // Имя канала (UTF16) //RDSXCSTR Channel; // Имя канала (поле-псевдоним) RDSINT32 Id; // Принятое целое число RDSCSTR StrA; // Принятая строка (UTF8) RDSWCSTR StrW; // Принятая строка (UTF16) //RDSXCSTR Str; // Принятая строка (поле-псевдоним) LPVOID Buffer; // Принятый буфер или NULL DWORD BufferSize; // Размер принятого буфера RDS_NETSTATION SenderStation; // Идентификатор // машины-отправителя RDS_NETBLOCK SenderBlock; // Идентификатор блока // на машине-отправителе } RDS_NETRECEIVEDDATA; typedef RDS_NETRECEIVEDDATA *RDS_PNETRECEIVEDDATA;
Поля структуры
- ConnId (RDSINT32)
- Идентификатор соединения, возвращенный функцией rdsNetConnect при его создании.
- HostA (RDSCSTR), HostW (RDSWCSTR), Host (RDSXCSTR)
- Имя (URL) или IP-адрес сервера, с которым установлено соединение (только в том случае, если в качестве сервера не используется та же копия «rds.exe», в которую загружена схема с данным блоком).
- Port (RDSINT32)
- Номер сетевого порта, через который идет обмен данными.
- ChannelA (RDSCSTR), ChannelW (RDSWCSTR), Channel (RDSXCSTR)
- Имя канала передачи данных.
- Id (RDSINT32)
- Целый идентификатор полученных данных (произвольное целое число, указанное передавшим данные блоком в вызове одной из функций передачи).
- StrA (RDSCSTR), StrW (RDSWCSTR), Str (RDSXCSTR)
- Указатель на принятую строку во внутренней памяти RDS. В этом поле никогда не находится константа NULL: даже если передавший блок не отправлял строку в составе порции данных, в поле Str будет содержаться указатель на пустую строку (то есть на нулевой байт).
- Buffer (LPVOID)
- Указатель на начало принятых двоичных данных во внутренней памяти RDS. Если передававший данные блок не отправлял двоичные данные, в этом поле будет находиться NULL.
- BufferSize (DWORD)
- Размер (в байтах) принятых двоичных данных, на которые указывает поле Buffer.
- SenderStation (RDS_NETSTATION)
- Идентификатор машины-передатчика, то есть машины, на которой запущена копия RDS, в которую загружена схема, блок которой отправил эти данные. Идентификаторы типа RDS_NETSTATION используются в RDS для передачи данных конкретному блоку на конкретной машине.
- SenderBlock (RDS_NETBLOCK)
- Идентификатор блока на машине-передатчике. Идентификаторы блоков типа RDS_NETBLOCK не взаимозаменяемы с идентификаторами RDS_BHANDLE: первые используются только в сетевых функциях для передачи данных конкретному блоку, вторые – в сервисных функциях для работы с блоками в пределах одной схемы. Пара (SenderStation, SenderBlock) однозначно определяет блок-отправитель данных и может использоваться в функции rdsNetSendData для передачи ответа пославшему данные блоку.
См. также