На ранних этап развития проекта во многих непонятных ситуациях мы просто закрывали комнату. Тогда еще было не ясно как обрабатывать определенные некорректные ситуации, а, таким образом их было проще обнаруживать.
Постепенно таких моментов становилось все меньше, на данный момент осталось всего два.
Необходимо их убрать, и ввести правило, что, комната может закрываться только в двух случаях:
По команде через Control API
В случае завершения приложения.
Solution
Что за два места, которые нужно поправить:
Отправка PeersRemovedEvent'а. Просто убираем shutdown, все проблемы рассинхронов состояния в результате утерянных сообщений чинятся в #47.
Ошибка обработки комманды. Эти ошибки на практике не происходят, следовательно, накручивать логику их обработки нецелесообразно, так как это потребует значительных временных ресурсов, а выхлоп стремится к нулю. Также, нельзя исключать возможность работы с модифицированным клиентом (например злоумышленно модифицированным). Простейшим выходом из этой ситуации будет отключение клиента. Клиент будет отключен с CloseReason::InternalError, в CallbackEvent'е будет значится причина "Kicked".
Synopsis
На ранних этап развития проекта во многих непонятных ситуациях мы просто закрывали комнату. Тогда еще было не ясно как обрабатывать определенные некорректные ситуации, а, таким образом их было проще обнаруживать.
Постепенно таких моментов становилось все меньше, на данный момент осталось всего два.
Необходимо их убрать, и ввести правило, что, комната может закрываться только в двух случаях:
Solution
Что за два места, которые нужно поправить:
PeersRemoved
Event
'а. Просто убираем shutdown, все проблемы рассинхронов состояния в результате утерянных сообщений чинятся в #47.CloseReason::InternalError
, вCallbackEvent
'е будет значится причина "Kicked".Checklist
Draft:
prefixk::
labels appliedDraft:
prefix is removed