重构Steam房间管理回调,添加IO失败处理,优化构造函数格式

This commit is contained in:
Ayndpa
2025-11-19 17:48:06 +08:00
parent 7ace8bbb3c
commit 2e0febc3a3
3 changed files with 32 additions and 14 deletions

View File

@@ -32,9 +32,6 @@ void SteamMessageHandler::run() {
// Poll networking // Poll networking
m_pInterface_->RunCallbacks(); 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 // Receive messages
pollMessages(); pollMessages();

View File

@@ -3,7 +3,8 @@
#include <iostream> #include <iostream>
#include <algorithm> #include <algorithm>
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; 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) if (pCallback->m_eResult == k_EResultOK)
{ {
roomManager_->setCurrentLobby(pCallback->m_ulSteamIDLobby); 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(); roomManager_->clearLobbies();
for (uint32 i = 0; i < pCallback->m_nLobbiesMatching; ++i) for (uint32 i = 0; i < pCallback->m_nLobbiesMatching; ++i)
{ {
@@ -183,7 +196,8 @@ bool SteamRoomManager::createLobby()
std::cerr << "Failed to create lobby" << std::endl; std::cerr << "Failed to create lobby" << std::endl;
return false; return false;
} }
// Call result will be handled by callback // Register the call result
steamMatchmakingCallbacks->m_CallResultLobbyCreated.Set(hSteamAPICall, steamMatchmakingCallbacks, &SteamMatchmakingCallbacks::OnLobbyCreated);
return true; return true;
} }
@@ -205,7 +219,8 @@ bool SteamRoomManager::searchLobbies()
std::cerr << "Failed to request lobby list" << std::endl; std::cerr << "Failed to request lobby list" << std::endl;
return false; return false;
} }
// Results will be handled by callback // Register the call result
steamMatchmakingCallbacks->m_CallResultLobbyMatchList.Set(hSteamAPICall, steamMatchmakingCallbacks, &SteamMatchmakingCallbacks::OnLobbyListReceived);
return true; return true;
} }

View File

@@ -11,25 +11,31 @@ class SteamFriendsCallbacks
{ {
public: public:
SteamFriendsCallbacks(SteamNetworkingManager *manager, SteamRoomManager *roomManager); SteamFriendsCallbacks(SteamNetworkingManager *manager, SteamRoomManager *roomManager);
void OnGameRichPresenceJoinRequested(GameRichPresenceJoinRequested_t *pCallback);
void OnGameLobbyJoinRequested(GameLobbyJoinRequested_t *pCallback);
private: private:
SteamNetworkingManager *manager_; SteamNetworkingManager *manager_;
SteamRoomManager *roomManager_; SteamRoomManager *roomManager_;
STEAM_CALLBACK(SteamFriendsCallbacks, OnGameRichPresenceJoinRequested, GameRichPresenceJoinRequested_t);
STEAM_CALLBACK(SteamFriendsCallbacks, OnGameLobbyJoinRequested, GameLobbyJoinRequested_t);
}; };
class SteamMatchmakingCallbacks class SteamMatchmakingCallbacks
{ {
public: public:
SteamMatchmakingCallbacks(SteamNetworkingManager *manager, SteamRoomManager *roomManager); SteamMatchmakingCallbacks(SteamNetworkingManager *manager, SteamRoomManager *roomManager);
void OnLobbyCreated(LobbyCreated_t *pCallback);
void OnLobbyListReceived(LobbyMatchList_t *pCallback); CCallResult<SteamMatchmakingCallbacks, LobbyCreated_t> m_CallResultLobbyCreated;
void OnLobbyEntered(LobbyEnter_t *pCallback); CCallResult<SteamMatchmakingCallbacks, LobbyMatchList_t> m_CallResultLobbyMatchList;
void OnLobbyCreated(LobbyCreated_t *pCallback, bool bIOFailure);
void OnLobbyListReceived(LobbyMatchList_t *pCallback, bool bIOFailure);
private: private:
SteamNetworkingManager *manager_; SteamNetworkingManager *manager_;
SteamRoomManager *roomManager_; SteamRoomManager *roomManager_;
STEAM_CALLBACK(SteamMatchmakingCallbacks, OnLobbyEntered, LobbyEnter_t);
}; };
class SteamRoomManager class SteamRoomManager