rpcService
src/main/rpc/rpc.service.ts
Для чого це
Виконує GWT RPC виклики до goldenbride.net від імені анкети. Основне призначення — keep-alive: сайт вважає анкету активною поки є регулярні RPC-запити з addUserToOnline payload.
Методи
getOnlineRPCPayload(ladyId_api)
Отримує тіло запиту для addUserToOnline:
- Створює тимчасовий
BrowserWindowз тим самимpartition: temp:profile_${id_api}що і основна вкладка анкети → ті самі cookies, та сама сесія setAudioMuted(true)— приглушує одразу- Відкриває
goldenbride.net/lady#!HOME - Перехоплює перший
POSTна/ladymodule/services/rpcщо міститьaddUserToOnline - Зберігає тіло запиту → закриває вікно → повертає 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)) - Вікно закривається після перехоплення першого відповідного запиту
Зв’язки
- Використовується: LadyOnlineService (keep-alive)
- PUBLIC_KEY оновлення: Login