Skip to content

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Разбор вашей программы

Ваша программа представляет собой систему для кодирования, передачи с возможными ошибками и декодирования сообщений с коррекцией ошибок. Давайте разберём её по частям.

Основные компоненты

1. Кодирование и декодирование с коррекцией ошибок (coding package)

Функция rcrEncode

  • Назначение: Кодирует 4-битный блок данных в 7-битный код с проверочными битами.
  • Как работает:
    1. Принимает байт, но использует только младшие 4 бита.
    2. Сдвигает данные на 3 бита влево (освобождая место для контрольных битов).
    3. Выполняет деление на полином 11 << 3 (в двоичном виде 11000), что соответствует циклическому избыточному коду (CRC).
    4. Объединяет исходные данные с остатком от деления.

Функция encode

  • Разбивает байт на два 4-битных полубайта и кодирует каждый с помощью rcrEncode.

Функция decode

  • Назначение: Декодирует 7-битный код обратно в 4-битные данные с коррекцией ошибок.
  • Как работает:
    1. Для каждого байта в входных данных:
      • Проверяет наличие ошибок с помощью того же полинома.
      • Если найден остаток (синдром ошибки), пытается исправить ошибку.
      • Если ошибок больше одной, помечает данные как невалидные.
    2. Объединяет два полубайта обратно в один байт.

Функция fixMistake

  • Исправляет одиночные битовые ошибки на основе синдрома ошибки.

Функция makeAdvancedMistakes

  • Вносит случайные ошибки в данные:
    • 10% шанс на 3 ошибки
    • 20% шанс на 2 ошибки
    • 70% шанс на 1 ошибку

Функция ProcessMessage

  • Основная функция обработки сообщения:
    1. Кодирует каждый байт сообщения.
    2. Вносит ошибки в случайно выбранную позицию.
    3. Декодирует сообщение с попыткой исправления ошибок.
    4. Есть 5% шанс "потери" всего сообщения (имитация сбоя).

2. HTTP сервер (main package)

Структура DATA

  • Используется для передачи сообщений между сервисами:
    • Username - имя пользователя
    • MessagePart - часть сообщения
    • Timestamp - метка времени
    • SequenceNumber - порядковый номер части
    • TotalParts - общее количество частей
    • Error - поле для ошибок (опционально)

Функция CodeHandler

  • Обрабатывает HTTP запросы:
    1. Принимает JSON с данными в формате DATA.
    2. Обрабатывает сообщение через coding.ProcessMessage.
    3. В случае ошибки возвращает информацию об ошибке.
    4. В случае успеха возвращает обработанные данные.
    5. Отправляет результат в транспортный уровень (другой сервис).

Функция SegmentHandler

  • Альтернативный обработчик для работы с сегментами сообщений.

Функция main

  • Настраивает маршруты:
    • /code - основной эндпоинт для обработки сообщений
    • /swagger/*any - документация Swagger
  • Запускает сервер на порту 8020.

Как работает вся система

  1. Клиент отправляет сообщение на сервер в формате JSON.
  2. Сервер кодирует сообщение, вносит случайные ошибки (с определённой вероятностью), затем пытается декодировать с коррекцией ошибок.
  3. Если сообщение невозможно восстановить (слишком много ошибок), сервер возвращает ошибку.
  4. Есть 5% шанс, что сообщение будет "потеряно" (имитация сбоя передачи).
  5. Результат (успешный или с ошибкой) отправляется обратно клиенту и в транспортный уровень.

Особенности реализации

  1. Коррекция ошибок: Используется метод, похожий на циклический избыточный код (CRC) с возможностью исправления одиночных ошибок.
  2. Вероятностная модель ошибок: Ошибки вносятся с разной вероятностью (1, 2 или 3 ошибки в байте).
  3. Swagger документация: API документировано с помощью Swagger.
  4. Микросервисная архитектура: Сервер общается с транспортным уровнем через HTTP.

Пример работы

  1. Клиент отправляет: {"username":"user1", "message_part":"test", ...}
  2. Сервер:
    • Кодирует "test" в 7-битные блоки
    • Вносит ошибки в случайный байт
    • Пытается декодировать
    • Если успешно - возвращает декодированное сообщение
    • Если ошибка - возвращает информацию об ошибке

Программа демонстрирует принципы помехоустойчивого кодирования и декодирования с возможностью исправления ошибок, что полезно в системах передачи данных с ненадёжными каналами связи.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages