| 254 | } |
| 255 | |
| 256 | void CloudHooks::InstallGamesPlayedObserver(uintptr_t steamclientBase, size_t steamclientSize) { |
| 257 | if (!g_serializeToArray) { |
| 258 | LOG("[GamesPlayed] serializer not resolved -- playtime tracking disabled"); |
| 259 | return; |
| 260 | } |
| 261 | |
| 262 | // Always install -- runs before config sets the toggles; per-message paths |
| 263 | // already check the live toggle (matches Windows). |
| 264 | GamesPlayedHook::SetSerializer(&SerializeBodyTL); |
| 265 | GamesPlayedHook::Install(steamclientBase, steamclientSize); |
| 266 | |
| 267 | if (LivePlaytime::Resolve(steamclientBase, steamclientSize, g_parseFromArray)) |
| 268 | LivePlaytime::InstallUserCapture(); |
| 269 | |
| 270 | AchievementInject::Resolve(steamclientBase, steamclientSize, &SerializeBodyTL); |
| 271 | SchemaFetch::Resolve(steamclientBase, steamclientSize, g_parseFromArray); |
| 272 | |
| 273 | // Inbound CM observer: captures our schema-fetch 819 replies and writes the |
| 274 | // schema .bin (mirror of the Windows RecvPktMonitorHook). |
| 275 | RecvPktHook::Install(steamclientBase, steamclientSize); |
| 276 | } |
| 277 | |
| 278 | static std::optional<CloudIntercept::RpcResult> DispatchCloudRpc( |
| 279 | const char* method, uint32_t appId, const std::vector<PB::Field>& reqBody) { |
nothing calls this directly
no test coverage detected