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

Описания RDS

Приложения

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

А.2. События блока и связанные с ними описания

А.2.8. События обмена данными по сети

А.2.8.3. RDS_BFM_NETDATARECEIVED – получение данных блоком

# Приложения

## Приложение А. Функции, константы и структуры 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 для передачи ответа пославшему данные блоку.

См. также

rdsNetBroadcastData, rdsNetSendData.