system

rpcService

rpcService

src/main/rpc/rpc.service.ts


Для чого це

Виконує GWT RPC виклики до goldenbride.net від імені анкети. Основне призначення — keep-alive: сайт вважає анкету активною поки є регулярні RPC-запити з addUserToOnline payload.


Методи

getOnlineRPCPayload(ladyId_api)

Отримує тіло запиту для addUserToOnline:

  1. Створює тимчасовий BrowserWindow з тим самим partition: temp:profile_${id_api} що і основна вкладка анкети → ті самі cookies, та сама сесія
  2. setAudioMuted(true) — приглушує одразу
  3. Відкриває goldenbride.net/lady#!HOME
  4. Перехоплює перший POST на /ladymodule/services/rpc що містить addUserToOnline
  5. Зберігає тіло запиту → закриває вікно → повертає payload

Навіщо тимчасове вікно: щоб отримати чистий payload без кешу. Сайт генерує addUserToOnline при завантаженні HOME сторінки.

Вікна зберігаються в Map<string, { window, lastUsed }> з ключем ${ladyId}_${Date.now()}.


sendUniversalRPC({ ladyId_api, body })

Надсилає довільний RPC через існуючу вкладку анкети:

  • tabsService.sendMessageToTabAsync({ type: UniversalRPC, data: { body } })
  • Парсить відповідь через parseRPCResponse()

Парсинг GWT RPC відповіді (parseRPCResponse)

Протокол: текстовий рядок що починається з //OK або //EX

ПрефіксДія
//OKПарсить JSON масив після 4-го символу → повертає масив
//EXПарсить масив → кидає Error з array[2][1] (message) або array[2][0] (type)

Склейка масивів: якщо відповідь містить .concat — склеює кілька JSON-масивів в один. Це особливість GWT серіалізації для великих відповідей.

При deserialized. в помилці — автоматично оновлює PUBLIC_KEY через apiService.stack.refreshPublicKey(). Означає що ключ застарів.


Нюанси

  • getOnlineRPCPayload завжди новий BrowserWindow — не переиспользує — щоб payload не містив старих даних сесії
  • Аудіо приглушується одразу при створенні (setAudioMuted(true))
  • Вікно закривається після перехоплення першого відповідного запиту

Зв’язки