From 09979e8eca0bb3c8fa728351b138575ba978a6d7 Mon Sep 17 00:00:00 2001 From: otavepto Date: Sat, 16 Mar 2024 05:19:04 +0200 Subject: [PATCH] add a param to prevent running the callbacks background thread, for manual dispatch --- dll/dll/steam_client.h | 4 +-- dll/dll/steam_networking_socketsserialized.h | 2 +- dll/dll/steam_user_stats.h | 2 +- dll/steam_client.cpp | 27 ++++++++++++++------ 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/dll/dll/steam_client.h b/dll/dll/steam_client.h index 000486a3..fb7bb78c 100644 --- a/dll/dll/steam_client.h +++ b/dll/dll/steam_client.h @@ -216,7 +216,7 @@ public: // Deprecated. Applications should use SteamAPI_RunCallbacks() or SteamGameServer_RunCallbacks() instead. - STEAM_PRIVATE_API( void RunFrame(); ) + STEAM_PRIVATE_API( void RunFrame() ); // returns the number of IPC calls made since the last time this function was called // Used for perf debugging so you can understand how many IPC calls your game makes per frame @@ -298,7 +298,7 @@ public: void RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall); void UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall); - void RunCallbacks(bool runClientCB, bool runGameserverCB); + void RunCallbacks(bool runClientCB, bool runGameserverCB, bool runBackgroundThread=true); void setAppID(uint32 appid); void userLogIn(); void serverInit(); diff --git a/dll/dll/steam_networking_socketsserialized.h b/dll/dll/steam_networking_socketsserialized.h index 8b55292a..be3fc815 100644 --- a/dll/dll/steam_networking_socketsserialized.h +++ b/dll/dll/steam_networking_socketsserialized.h @@ -40,7 +40,7 @@ static void steam_callback(void *object, Common_Message *msg) static void steam_run_every_runcb(void *object) { - PRINT_DEBUG("steam_networkingsockets_run_every_runcb\n"); + PRINT_DEBUG("steam_networkingsockets_serialized_run_every_runcb\n"); Steam_Networking_Sockets_Serialized *steam_networkingsockets = (Steam_Networking_Sockets_Serialized *)object; steam_networkingsockets->RunCallbacks(); diff --git a/dll/dll/steam_user_stats.h b/dll/dll/steam_user_stats.h index 46b5bbe7..bcd0f56e 100644 --- a/dll/dll/steam_user_stats.h +++ b/dll/dll/steam_user_stats.h @@ -1199,7 +1199,7 @@ SteamAPICall_t RequestGlobalStats( int nHistoryDays ) { PRINT_DEBUG("Steam_User_Stats::RequestGlobalStats %i\n", nHistoryDays); std::lock_guard lock(global_mutex); - GlobalStatsReceived_t data; + GlobalStatsReceived_t data{}; data.m_nGameID = settings->get_local_game_id().ToUint64(); data.m_eResult = k_EResultOK; return callback_results->addCallResult(data.k_iCallback, &data, sizeof(data)); diff --git a/dll/steam_client.cpp b/dll/steam_client.cpp index 74b3b6c0..425b6678 100644 --- a/dll/steam_client.cpp +++ b/dll/steam_client.cpp @@ -1872,34 +1872,45 @@ void Steam_Client::UnregisterCallResult( class CCallbackBase *pCallback, SteamAP callback_results_server->rmCallBack(hAPICall, pCallback); } -void Steam_Client::RunCallbacks(bool runClientCB, bool runGameserverCB) +void Steam_Client::RunCallbacks(bool runClientCB, bool runGameserverCB, bool runBackgroundThread) { + PRINT_DEBUG("Steam_Client::RunCallbacks begin ------------------------------------------------------\n"); std::lock_guard lock(global_mutex); - if (!background_keepalive.joinable()) background_keepalive = std::thread(background_thread, this); + if (runBackgroundThread && !background_keepalive.joinable()) { + background_keepalive = std::thread(background_thread, this); + PRINT_DEBUG("Steam_Client::RunCallbacks spawned background thread *********\n"); + } + PRINT_DEBUG("Steam_Client::RunCallbacks network *********\n"); network->Run(); - PRINT_DEBUG("Steam_Client::RunCallbacks steam_matchmaking_servers\n"); + + PRINT_DEBUG("Steam_Client::RunCallbacks steam_matchmaking_servers *********\n"); steam_matchmaking_servers->RunCallbacks(); + + PRINT_DEBUG("Steam_Client::RunCallbacks run_every_runcb *********\n"); run_every_runcb->run(); + PRINT_DEBUG("Steam_Client::RunCallbacks steam_gameserver *********\n"); steam_gameserver->RunCallbacks(); if (runClientCB) { - PRINT_DEBUG("Steam_Client::RunCallbacks callback_results_client\n"); + PRINT_DEBUG("Steam_Client::RunCallbacks callback_results_client *********\n"); callback_results_client->runCallResults(); } if (runGameserverCB) { - PRINT_DEBUG("Steam_Client::RunCallbacks callback_results_server\n"); + PRINT_DEBUG("Steam_Client::RunCallbacks callback_results_server *********\n"); callback_results_server->runCallResults(); } - PRINT_DEBUG("Steam_Client::RunCallbacks callbacks_server\n"); + PRINT_DEBUG("Steam_Client::RunCallbacks callbacks_server *********\n"); callbacks_server->runCallBacks(); - PRINT_DEBUG("Steam_Client::RunCallbacks callbacks_client\n"); + + PRINT_DEBUG("Steam_Client::RunCallbacks callbacks_client *********\n"); callbacks_client->runCallBacks(); + last_cb_run = std::chrono::duration_cast>(std::chrono::system_clock::now().time_since_epoch()).count(); - PRINT_DEBUG("Steam_Client::RunCallbacks done\n"); + PRINT_DEBUG("Steam_Client::RunCallbacks done ------------------------------------------------------\n\n"); } void Steam_Client::DestroyAllInterfaces()