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

Описания RDS

Описание пользователя

Глава 3. Использование стандартных модулей автокомпиляции

§3.7. Краткий перечень вводимых в модель описаний и реакций на события

§3.7.10. Обмен данными по сети

§3.7.10.1. Получены данные по сети

# Описание пользователя

## Глава 3. Использование стандартных модулей автокомпиляции

### §3.7. Краткий перечень вводимых в модель описаний и реакций на события

#### §3.7.10. Обмен данными по сети

Рассматриваются реакции на события, связанные с встроенными в RDS процедурами обмена данными по сети.

##### §3.7.10.1. Получены данные по сети

Это событие возникает при обмене данными по сети в блоке, для которого поступили данные с сервера. Стандартный модуль автокомпиляции не автоматизирует передачу данных между блоками по сети, желающие реализовать ее могут изучить §2.15 руководства программиста.

Текст реакции на получение данных вводится на вкладке «события» левой панели редактора модели: раздел «сеть», подраздел «получены данные». В классе блока для нее создается функция с именем rdsbcppNetReceive следующего вида:

      // Data received from the network
      void rdsbcppBlockClass::rdsbcppNetReceive(RDS_PNETRECEIVEDDATA NetData)
      {
         … пользовательский текст реакции …
      }

Параметр функции NetData – это указатель на структуру 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(int)
  Уникальный идентификатор сетевого соединения, возвращенный сервисной функцией при его создании.
HostA(RDSCSTR),HostW(RDSWCSTR),Host(RDSXCSTR)
  Имя (URL) или IP-адрес сервера, с которым установлено соединение.
Port(int)
  Номер сетевого порта, через который идет обмен данными.
ChannelA(RDSCSTR),ChannelW(RDSWCSTR),Channel(RDSXCSTR)
  Имя канала передачи данных, из которого поступили данные.
Id(int)
  Целый идентификатор полученных данных (произвольное целое число, указанное передавшим данные блоком в вызове одной из функций передачи).
StrA(RDSCSTR),StrW(RDSWCSTR),Str(RDSXCSTR)
  Указатель на принятую по сети строку во внутренней памяти RDS.
Buffer(LPVOID)
  Указатель на начало принятых двоичных данных во внутренней памяти RDS.
BufferSize(DWORD)
  Размер (в байтах) принятых двоичных данных, на которые указывает поле Buffer.
SenderStation(RDS_NETSTATION)
  Идентификатор машины-передатчика, то есть машины, на которой запущена копия RDS, в которую загружена схема, блок которой отправил эти данные.
SenderBlock(RDS_NETBLOCK)
  Идентификатор блока-отправителя на машине-передатчике.

При написании моделей блоков без использования модуля автокомпиляции получению данных по сети соответствует константа RDS RDS_BFM_NETDATARECEIVED.