LadyRunner

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.

  1. createChatTab()LadyRunner-Tab — відкриває Electron-вкладку TU
  2. taskFactory.init() — завантажує активні таски з сервера
  3. whiteListService.init() — завантажує whitelist
  4. delay(1000) — пауза перед стартом моніторингу
  5. manOnlineService.start(true) — старт відстеження онлайну RU
  6. favoriteService.updateFavoritesAfterInit() — синхронізує фаворитів
  7. existsTab = true, reconnectCount = 0

При невдачі createChatTabexistsTab залишається false, TU пропускається.


runTasks()

Запускає taskChatService.start(). Тільки якщо existsTab = true.

taskMailService відключений — логіку перебудовано.


runSenders()

  1. apiSenderService.getSendersState() — завантажує збережений стан сендерів
  2. chatSender.initialize(state) · mailSender.initialize(state) — відновлюють чергу і треки
  3. chatQueue.start() · mailSender.process() — запуск

Захист: якщо !existsTab або sendersWasRunning → нічого не робить.


stop()

Зупиняє всі сервіси, закриває вкладку (tabsService.logout + destroyAllByLadyId), скидає флаги.


setSocketConnected(status, message?)

Точка-збірка для зміни socketConnected. Викликається з message-parser-у на connect / error / authError socket-події. Робить три речі однією дією:

  1. this.socketConnected = status
  2. reactService.ladySocketStatus({status, ladyId_api, message}) — фронт оператора
  3. supervisorStreamService.notifyLadyUpdated(this.ladyToReact()) — фронт тімліда

ladyToReact() — helper що повертає {...lady, isReady: socketConnected, isOnline} (форма ILadyReact, та сама що в initial snapshot тімліда).


Зв’язки