mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
Merge pull request #3858 from Aestek/feature/better-netplay-gamenotfound
Netplay: check if all players have the game before starting
This commit is contained in:
@ -356,6 +356,33 @@ unsigned int NetPlayClient::OnData(sf::Packet& packet)
|
||||
|
||||
// update gui
|
||||
m_dialog->OnMsgChangeGame(m_selected_game);
|
||||
|
||||
sf::Packet spac;
|
||||
spac << static_cast<MessageId>(NP_MSG_GAME_STATUS);
|
||||
|
||||
PlayerGameStatus status = m_dialog->FindGame(m_selected_game).empty() ?
|
||||
PlayerGameStatus::NotFound :
|
||||
PlayerGameStatus::Ok;
|
||||
|
||||
spac << static_cast<u32>(status);
|
||||
Send(spac);
|
||||
}
|
||||
break;
|
||||
|
||||
case NP_MSG_GAME_STATUS:
|
||||
{
|
||||
PlayerId pid;
|
||||
packet >> pid;
|
||||
|
||||
{
|
||||
std::lock_guard<std::recursive_mutex> lkp(m_crit.players);
|
||||
Player& player = m_players[pid];
|
||||
u32 status;
|
||||
packet >> status;
|
||||
player.game_status = static_cast<PlayerGameStatus>(status);
|
||||
}
|
||||
|
||||
m_dialog->Update();
|
||||
}
|
||||
break;
|
||||
|
||||
@ -597,7 +624,26 @@ void NetPlayClient::GetPlayerList(std::string& list, std::vector<int>& pid_list)
|
||||
enumerate_player_controller_mappings(m_pad_map, player);
|
||||
enumerate_player_controller_mappings(m_wiimote_map, player);
|
||||
|
||||
ss << " |\nPing: " << player.ping << "ms\n\n";
|
||||
ss << " |\nPing: " << player.ping << "ms\n";
|
||||
ss << "Status: ";
|
||||
|
||||
switch (player.game_status)
|
||||
{
|
||||
case PlayerGameStatus::Ok:
|
||||
ss << "ready";
|
||||
break;
|
||||
|
||||
case PlayerGameStatus::NotFound:
|
||||
ss << "game missing";
|
||||
break;
|
||||
|
||||
default:
|
||||
ss << "unknown";
|
||||
break;
|
||||
}
|
||||
|
||||
ss << "\n\n";
|
||||
|
||||
pid_list.push_back(player.pid);
|
||||
}
|
||||
|
||||
@ -1143,6 +1189,14 @@ void NetPlayClient::SendTimeBase()
|
||||
netplay_client->SendAsync(std::move(spac));
|
||||
}
|
||||
|
||||
bool NetPlayClient::DoAllPlayersHaveGame()
|
||||
{
|
||||
std::lock_guard<std::recursive_mutex> lkp(m_crit.players);
|
||||
|
||||
return std::all_of(std::begin(m_players), std::end(m_players),
|
||||
[](auto entry) { return entry.second.game_status == PlayerGameStatus::Ok; });
|
||||
}
|
||||
|
||||
// stuff hacked into dolphin
|
||||
|
||||
// called from ---CPU--- thread
|
||||
|
Reference in New Issue
Block a user