From 2e0febc3a3bbf91c9914b527e988a24138ce822f Mon Sep 17 00:00:00 2001 From: Ayndpa Date: Wed, 19 Nov 2025 17:48:06 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84Steam=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=9B=9E=E8=B0=83=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?IO=E5=A4=B1=E8=B4=A5=E5=A4=84=E7=90=86=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=9E=84=E9=80=A0=E5=87=BD=E6=95=B0=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- steam/steam_message_handler.cpp | 3 --- steam/steam_room_manager.cpp | 27 +++++++++++++++++++++------ steam/steam_room_manager.h | 16 +++++++++++----- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/steam/steam_message_handler.cpp b/steam/steam_message_handler.cpp index 10dfbe7..1cdbdb4 100644 --- a/steam/steam_message_handler.cpp +++ b/steam/steam_message_handler.cpp @@ -32,9 +32,6 @@ void SteamMessageHandler::run() { // Poll networking m_pInterface_->RunCallbacks(); - // Update user info (assuming userMap is accessible, but for simplicity, skip or add as param) - // Note: userMap update might need to be handled elsewhere or passed - // Receive messages pollMessages(); diff --git a/steam/steam_room_manager.cpp b/steam/steam_room_manager.cpp index cfa00c2..e7bd6ed 100644 --- a/steam/steam_room_manager.cpp +++ b/steam/steam_room_manager.cpp @@ -3,7 +3,8 @@ #include #include -SteamFriendsCallbacks::SteamFriendsCallbacks(SteamNetworkingManager *manager, SteamRoomManager *roomManager) : manager_(manager), roomManager_(roomManager) +SteamFriendsCallbacks::SteamFriendsCallbacks(SteamNetworkingManager *manager, SteamRoomManager *roomManager) + : manager_(manager), roomManager_(roomManager) { std::cout << "SteamFriendsCallbacks constructor called" << std::endl; } @@ -99,10 +100,17 @@ void SteamFriendsCallbacks::OnGameLobbyJoinRequested(GameLobbyJoinRequested_t *p } } -SteamMatchmakingCallbacks::SteamMatchmakingCallbacks(SteamNetworkingManager *manager, SteamRoomManager *roomManager) : manager_(manager), roomManager_(roomManager) {} +SteamMatchmakingCallbacks::SteamMatchmakingCallbacks(SteamNetworkingManager *manager, SteamRoomManager *roomManager) + : manager_(manager), roomManager_(roomManager) +{} -void SteamMatchmakingCallbacks::OnLobbyCreated(LobbyCreated_t *pCallback) +void SteamMatchmakingCallbacks::OnLobbyCreated(LobbyCreated_t *pCallback, bool bIOFailure) { + if (bIOFailure) + { + std::cerr << "Failed to create lobby - IO Failure" << std::endl; + return; + } if (pCallback->m_eResult == k_EResultOK) { roomManager_->setCurrentLobby(pCallback->m_ulSteamIDLobby); @@ -120,8 +128,13 @@ void SteamMatchmakingCallbacks::OnLobbyCreated(LobbyCreated_t *pCallback) } } -void SteamMatchmakingCallbacks::OnLobbyListReceived(LobbyMatchList_t *pCallback) +void SteamMatchmakingCallbacks::OnLobbyListReceived(LobbyMatchList_t *pCallback, bool bIOFailure) { + if (bIOFailure) + { + std::cerr << "Failed to receive lobby list - IO Failure" << std::endl; + return; + } roomManager_->clearLobbies(); for (uint32 i = 0; i < pCallback->m_nLobbiesMatching; ++i) { @@ -183,7 +196,8 @@ bool SteamRoomManager::createLobby() std::cerr << "Failed to create lobby" << std::endl; return false; } - // Call result will be handled by callback + // Register the call result + steamMatchmakingCallbacks->m_CallResultLobbyCreated.Set(hSteamAPICall, steamMatchmakingCallbacks, &SteamMatchmakingCallbacks::OnLobbyCreated); return true; } @@ -205,7 +219,8 @@ bool SteamRoomManager::searchLobbies() std::cerr << "Failed to request lobby list" << std::endl; return false; } - // Results will be handled by callback + // Register the call result + steamMatchmakingCallbacks->m_CallResultLobbyMatchList.Set(hSteamAPICall, steamMatchmakingCallbacks, &SteamMatchmakingCallbacks::OnLobbyListReceived); return true; } diff --git a/steam/steam_room_manager.h b/steam/steam_room_manager.h index 166698b..ea67475 100644 --- a/steam/steam_room_manager.h +++ b/steam/steam_room_manager.h @@ -11,25 +11,31 @@ class SteamFriendsCallbacks { public: SteamFriendsCallbacks(SteamNetworkingManager *manager, SteamRoomManager *roomManager); - void OnGameRichPresenceJoinRequested(GameRichPresenceJoinRequested_t *pCallback); - void OnGameLobbyJoinRequested(GameLobbyJoinRequested_t *pCallback); private: SteamNetworkingManager *manager_; SteamRoomManager *roomManager_; + + STEAM_CALLBACK(SteamFriendsCallbacks, OnGameRichPresenceJoinRequested, GameRichPresenceJoinRequested_t); + STEAM_CALLBACK(SteamFriendsCallbacks, OnGameLobbyJoinRequested, GameLobbyJoinRequested_t); }; class SteamMatchmakingCallbacks { public: SteamMatchmakingCallbacks(SteamNetworkingManager *manager, SteamRoomManager *roomManager); - void OnLobbyCreated(LobbyCreated_t *pCallback); - void OnLobbyListReceived(LobbyMatchList_t *pCallback); - void OnLobbyEntered(LobbyEnter_t *pCallback); + + CCallResult m_CallResultLobbyCreated; + CCallResult m_CallResultLobbyMatchList; + + void OnLobbyCreated(LobbyCreated_t *pCallback, bool bIOFailure); + void OnLobbyListReceived(LobbyMatchList_t *pCallback, bool bIOFailure); private: SteamNetworkingManager *manager_; SteamRoomManager *roomManager_; + + STEAM_CALLBACK(SteamMatchmakingCallbacks, OnLobbyEntered, LobbyEnter_t); }; class SteamRoomManager