Runner (Механизм отслеживания событий)
Runner — это фоновый бесконечный цикл ядра, который опрашивает FunPay и генерирует события для плагинов.
Как устроен опрос FunPay:
- Чат и сообщения (Long-polling):
- Делает непрерывные запросы к эндпоинту
/runner/FunPay. - При получении новых сообщений парсит их и триггерит
NewMessageEvent.
- Делает непрерывные запросы к эндпоинту
- Заказы и продажи (HTML Polling):
- С периодичностью в N секунд парсит страницу
/orders/trade. - Хранит в памяти снимок (снапшот) последних заказов.
- Если видит новый заказ -> кидает
NewOrderEvent. - Если статус изменился (оплачен -> закрыт/возврат) -> кидает
OrderStatusChangedEvent.
- С периодичностью в N секунд парсит страницу
Важные нюансы для разработчиков плагинов:
- Порядок событий НЕ гарантирован:
Сообщение в чат от системы (“Покупатель оплатил заказ#XXXXXX”) может прийти на 0.5–1с быстрее, чемrunnerраспарсит таблицу заказов. Плагин должен уметь обрабатывать оба сценария. - Не блокируйте Event-поток:
Все функции-хэндлеры (BIND_TO_*) вызываются синхронно в цикле обработки. Если вы сделаете внутри хэндлераtime.sleep(10)или тяжелый синхронный запрос к внешнему API, вы заморозите весь Runner Cardinal! Тяжелые задачи всегда выносите вthreading.ThreadилиThreadPoolExecutor. - Авто-поднятие лотов:
Runner также отвечает за таймер авто-подъема лотов и триггеритBIND_TO_POST_LOTS_RAISE.