diff --git a/Source/Core/Core/Src/NetPlayClient.cpp b/Source/Core/Core/Src/NetPlayClient.cpp index 62d0569ae9..e10cc25186 100644 --- a/Source/Core/Core/Src/NetPlayClient.cpp +++ b/Source/Core/Core/Src/NetPlayClient.cpp @@ -35,7 +35,7 @@ std::string NetPlayClient::Player::ToString() const ss << name << '[' << (char)(pid+'0') << "] : " << revision << " |"; for (unsigned int i=0; i<4; ++i) ss << (pad_map[i]>=0 ? (char)(pad_map[i]+'1') : '-'); - ss << '|'; + ss << " | " << ping << "ms"; return ss.str(); } @@ -293,6 +293,21 @@ unsigned int NetPlayClient::OnData(sf::Packet& packet) } break; + case NP_MSG_PLAYER_PING_DATA: + { + PlayerId pid; + packet >> pid; + + { + std::lock_guard lkp(m_crit.players); + Player& player = m_players[pid]; + packet >> player.ping; + } + + m_dialog->Update(); + } + break; + default : PanicAlertT("Unknown message received with id : %d", mid); break; diff --git a/Source/Core/Core/Src/NetPlayClient.h b/Source/Core/Core/Src/NetPlayClient.h index 18e98a2b9e..d44a4c84b8 100644 --- a/Source/Core/Core/Src/NetPlayClient.h +++ b/Source/Core/Core/Src/NetPlayClient.h @@ -94,6 +94,7 @@ protected: std::string name; PadMapping pad_map[4]; std::string revision; + u32 ping; }; Common::FifoQueue m_pad_buffer[4]; diff --git a/Source/Core/Core/Src/NetPlayProto.h b/Source/Core/Core/Src/NetPlayProto.h index fc2031a0f0..84e2b420fd 100644 --- a/Source/Core/Core/Src/NetPlayProto.h +++ b/Source/Core/Core/Src/NetPlayProto.h @@ -23,7 +23,7 @@ struct Rpt : public std::vector typedef std::vector NetWiimote; -#define NETPLAY_VERSION "Dolphin NetPlay 2013-07-19" +#define NETPLAY_VERSION "Dolphin NetPlay 2013-08-05" // messages enum @@ -50,6 +50,7 @@ enum NP_MSG_PING = 0xE0, NP_MSG_PONG = 0xE1, + NP_MSG_PLAYER_PING_DATA = 0xE2, }; typedef u8 MessageId; diff --git a/Source/Core/Core/Src/NetPlayServer.cpp b/Source/Core/Core/Src/NetPlayServer.cpp index affffac1eb..00f35d6ac7 100644 --- a/Source/Core/Core/Src/NetPlayServer.cpp +++ b/Source/Core/Core/Src/NetPlayServer.cpp @@ -456,6 +456,14 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, sf::SocketTCP& socket) if (m_ping_key == ping_key) player.ping = ping; + + sf::Packet spac; + spac << (MessageId)NP_MSG_PLAYER_PING_DATA; + spac << player.pid; + spac << player.ping; + + std::lock_guard lks(m_crit.send); + SendToClients(spac); } break; diff --git a/Source/Core/Core/Src/NetPlayServer.h b/Source/Core/Core/Src/NetPlayServer.h index 7bf114205c..95f98e2a73 100644 --- a/Source/Core/Core/Src/NetPlayServer.h +++ b/Source/Core/Core/Src/NetPlayServer.h @@ -61,7 +61,7 @@ private: std::string revision; sf::SocketTCP socket; - u64 ping; + u32 ping; u32 current_game; };