Skip to content

Latest commit

 

History

History
32 lines (26 loc) · 2.14 KB

README.md

File metadata and controls

32 lines (26 loc) · 2.14 KB

ISS_test

Написать класс с интерфейсом:

    struct IReceiver
    {
        virtual void Receive(const char* data, unsigned int size) = 0;
    };

на вход которого (через интерфейс IReceiver) блоками различного размера непрерывно поступает поток данных.

Сам поток представляет собой последовательность пакетов двух типов (пакеты идут вперемешку):

  1. 0x24 (1 байт), размер последующих бинарных данных в пакете (4-байтовый), сами бинарные данные.
  2. Текстовые данные, заканчивающиеся на "\r\n\r\n".

Как только обнаружен конец пакета, необходимо данные пакета передать потребителю через callback-интерфейс:

    struct ICallback
    {
        virtual void BinaryPacket(const char* data, unsigned int size) = 0;
        virtual void TextPacket(const char* data, unsigned int size) = 0;
    };

В обе функции за раз передаётся всё содержимое пакета целиком, без заголовков и "\r\n\r\n".

Надо иметь в виду, что данные на интерфейс IReceiver поступают произвольными блоками (нет никакой привязки к размерам и границам пакетов). Деление на блоки никак не привязано к делению на пакеты; границы блоков могут быть внутри пакетов, а границы пакетов - внутри блоков.

Класс должен быть как можно эффективнее при следующих условиях:

  • средний поток, подаваемый на вход – 500 Мбит/с;
  • средняя длина блока входных данных – 1024 байт.

В решении важна простота и читаемость.