| 566 | GSDK::logMessage("Received non-success code from Agent. Status Code: " + std::to_string(http_code) + " Response Body: " + m_receivedData); |
| 567 | return; |
| 568 | } |
| 569 | |
| 570 | decodeHeartbeatResponse(m_receivedData); |
| 571 | } |
| 572 | |
| 573 | Microsoft::Azure::Gaming::GSDKInternal& GSDKInternal::get() |
| 574 | { |
| 575 | std::unique_lock<std::mutex> lock(m_gsdkInitMutex); |
| 576 | |
| 577 | if (!m_instance) |
| 578 | { |
| 579 | m_instance = std::make_unique<GSDKInternal>(); |
| 580 | |
| 581 | // At exit, atexit handlers and static destructors run in reverse order of registration/construction. |
| 582 | // Registering once the first instance exists (normally from GSDK::start() in main) stops our threads |
| 583 | // before anything set up earlier - ours or the game's - is torn down. |
| 584 | static const bool registeredAtExit = std::atexit(&GSDKInternal::stopThreadsAtExit) == 0; |
| 585 | (void)registeredAtExit; |
| 586 | } |