LadyRunner
src/main/lady/lady.runner.ts
Окремий runner для кожної TU. Створюється в OperatorRunner — по одному на кожну активну TU. Контейнер для всіх логік конкретної TU.
Що містить (constructor)
| Група | Сервіси |
|---|---|
| Інтервали | ManOnlineService, TaskChatService, TaskMailService, BlockListService |
| Сервіси | FavoriteService, WhiteListService, LastSendService |
| Відправка | ChatSender, MailSender, ChatQueue |
| Інше | SocketMessageParser, TaskService |
Флаги: existsTab, socketConnected, isOnline, sendersWasRunning, reconnectCount
Стани для тімліда: manWatching: Set<number> — manId_api що зараз дивляться нашу TU. Оновлюється з socket-події receiveVideoMode; чиститься коли TU перестає стрімити (в ManOnlineService) і в resetState().
init({ PUBLIC_KEY })
Викликається з LadyRunner-Init для кожної TU.
createChatTab()→ LadyRunner-Tab — відкриває Electron-вкладку TUtaskFactory.init()— завантажує активні таски з сервераwhiteListService.init()— завантажує whitelistdelay(1000)— пауза перед стартом моніторингуmanOnlineService.start(true)— старт відстеження онлайну RUfavoriteService.updateFavoritesAfterInit()— синхронізує фаворитівexistsTab = true,reconnectCount = 0
При невдачі createChatTab → existsTab залишається false, TU пропускається.
runTasks()
Запускає taskChatService.start(). Тільки якщо existsTab = true.
taskMailService відключений — логіку перебудовано.
runSenders()
apiSenderService.getSendersState()— завантажує збережений стан сендерівchatSender.initialize(state)·mailSender.initialize(state)— відновлюють чергу і трекиchatQueue.start()·mailSender.process()— запуск
Захист: якщо !existsTab або sendersWasRunning → нічого не робить.
stop()
Зупиняє всі сервіси, закриває вкладку (tabsService.logout + destroyAllByLadyId), скидає флаги.
setSocketConnected(status, message?)
Точка-збірка для зміни socketConnected. Викликається з message-parser-у на connect / error / authError socket-події. Робить три речі однією дією:
this.socketConnected = statusreactService.ladySocketStatus({status, ladyId_api, message})— фронт оператораsupervisorStreamService.notifyLadyUpdated(this.ladyToReact())— фронт тімліда
ladyToReact() — helper що повертає {...lady, isReady: socketConnected, isOnline} (форма ILadyReact, та сама що в initial snapshot тімліда).
Зв’язки
- Ініціалізується: LadyRunner-Init
- Вкладка: LadyRunner-Tab
- Інтервали: TaskChatService, ManOnlineService, BlockListService
- Сендери: ChatSender, MailSender, ChatQueue