# MQTT client
## Описание
Требуется написать backend приложение, которое реализует следующие возможности взаимодействия с mqtt брокерами (серверами):
- Подключение к серверу
- Отключение от сервера
- Добавить топик в список подписок
- Удалить топик из списка подписок
- Отправить сообщение в указанный топик
- Получить новые сообщения из топиков (подписок)
- Получить полный лог всех сообщений по топику
- Получить полный лог всех сообщений по всем топикам
## Взаимодействие с mqtt
Взаимодействие серверами mqtt осуществляется через класс **BasicMqttClient**, который реализует интерфейс **IMqttClient**. На каждое подключение к серверу создаётся объект класса BasicMqttClient.
## Пользователи
Должна быть возможность работы нескольких пользователей. На каждое действие должен передаваться id пользователя, либо за каждым подключением пользователя должен закрепляться id, полученное от пользователя.
Как таковой регистрации пользователей нет. При подключении к серверу пользователь передаёт произвольное число типа int, которое будет служить его id. Допускается возможность существования нескольких соединений с одинаковым id.
## Логгирование
Хранение логов может производится любим удобным способом:
- база данных
- текстовый файл
- json
- csv
## Общее
Так как требуется максимально снизить время задержки уведомления клиентов о новых сообщениях, желательно использовать технологию websocket либо технологии, основанные на ней (к примеру, SignalR).
Целевая платформа, при использовании C#: **.NET Core 3.1** или **.NET 5.0**
Тип проекта: **ASP.NET** или **ASP.NET MVC**