Skip to content

LostInKadath/ISS_test

Repository files navigation

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 байт.

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published