重构Steam房间管理回调,添加IO失败处理,优化构造函数格式
This commit is contained in:
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user