flow auth

Logout

Logout

operatorRunner.stop() · src/main/operator/operator.runner.ts

Повна зупинка всіх логік і очистка стану. Запускається або вручну оператором, або автоматично якщо start() впав з помилкою.


Послідовність зупинки

1. Флаг і глобальні інтервали оператора

isActive = false
statisticsService.stop()
networkService.stop()
activityService.stop()
ladyOnlineService.stop()
favoriteService.stop()

2. Socket + глобальні системні сервіси

operatorAuthService.logout()
  └── stackSocket.stop()           ← закриває WebSocket з'єднання

stopGlobalServices()
  ├── updateService.stop()         ← зупиняє перевірку оновлень (15-хв інтервал)
  └── osMonitorService.stop()      ← зупиняє моніторинг CPU/RAM, скидає значення в 0

3. Лог на сервер

stackService.saveLog({ title: 'Operator logout!' })   ← fire-and-forget, помилка не блокує

4. Зупинка views і stream

savingViewsService.stop()
streamTrackingService.stop()     ← await, закриває активні стрім-інтервали в БД

5. Зупинка всіх LadyRunner-ів (паралельно)

Promise.all( ladyRunners.map(lady => lady.stop()) )

Для кожної анкети:
  tabsService.logout(id_api)      ← надсилає Logout команду у BrowserWindow вкладку
  manOnlineService.stop()
  taskChatService.stop()
  taskMailService.stop()
  blockListService.stop()
  chatQueue.stop()
  chatSender.stop()
  mailSender.stop()
  taskFactory.stop()
  lastSendService.stop()
  existsTab = false
  socketConnected = false
  sendersWasRunning = false

6. Фінальна синхронізація з сервером

dataSyncService.stop()            ← await, виконує останній sync перед зупинкою
                                     (7 таблиць: streams, chats, mails, online, views, logs, actions)

7. Пауза і скидання стану

delay(1000)                       ← чекає 1 секунду щоб всі async операції завершились

resetState():
  isInitialized = false
  isSuccessInitialized = false
  ladyRunners = []
  operatorFamilyId = ''
  PUBLIC_KEY = ''
  isActive = true                 ← готовий до повторного логіну

Нюанси

  • Якщо будь-який крок stop() кидає виняток — app.quit(). Примусово закриває Electron-додаток, щоб не залишати завислий стан
  • streamTrackingService.stop() і dataSyncService.stop()awaited (критичні: треба закрити інтервали і відправити дані)
  • Всі ladyRunner.stop()паралельно через Promise.all
  • stackService.saveLog() — fire-and-forget (.catch є, але не блокує)
  • Після resetState() operatorRunner готовий прийняти новий start() без перезапуску програми

Зв’язки