Слушатель отлично работает для информирования о новых активных пользователях, но когда кто-то выходит из системы, слушатель этого не распознает. Есть идеи, как с этим справиться? Ах, значит, нужно ещё и обнаруживать выход из системы… Тогда попробуй команду «/ip/hotspot/user/active/listen» без аргументов. Она должна показывать не только момент входа пользователя в хотспот, но и выход — как явный, так и из-за истечения сессии. Выход пользователя можно отличить по свойству «.dead», которое будет установлено в «yes», когда пользователь уже неактивен.
В общем, нужно ДОБАВЛЯТЬ пользователя, изменять данные пользователя, показывать текущих зарегистрированных пользователей и информировать, кто активен (исходя из текущего списка пользователей). Но… все пользователей хотспота можно получить командой «/ip/hotspot/user/print», а всех активных — с помощью (синхронной) «/ip/hotspot/user/active/print». Нет смысла смотреть в базу данных, которая теоретически может не совпадать с состоянием роутера.
Есть простой способ избежать обращения к базе и при удалении пользователей (чтобы управление было менее подвержено ошибкам). При создании пользователя хотспота сразу создавай скрипт расписания, который будет его удалять, и запускай этот скрипт, когда гость уходит, а в конце сам скрипт удаляй. Так, даже если база данных упадёт, единственная проблема — новые пользователи хотспота не смогут добавляться (легко), а текущие будут работать и завершат сеанс как обычно.
Если гость из отеля решит продлить время — просто измени время работы скрипта расписания (предварительно назвав его по имени пользователя хотспота, чтобы легко его найти) — и всё будет готово.