Display ping to server in lobby

This commit is contained in:
Benau 2018-03-23 22:19:44 +08:00
parent 1e2cb2dc4a
commit 025ca63df0
4 changed files with 35 additions and 6 deletions

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<stkgui> <stkgui>
<div x="0" y="0" width="100%" height="100%" layout="vertical-row" > <div x="0" y="0" width="100%" height="100%" layout="vertical-row" >
<header text_align="center" width="80%" align="center" I18N="In networking lobby" text="Lobby"/> <header id="lobby-text" text_align="center" width="80%" align="center" I18N="In networking lobby" text="Lobby"/>
<spacer height="15" width="10"/> <spacer height="15" width="10"/>
<div proportion="4" x="2%" width="96%" layout="vertical-row"> <div proportion="4" x="2%" width="96%" layout="vertical-row">
<div width="100%" proportion="2" layout="horizontal-row"> <div width="100%" proportion="2" layout="horizontal-row">

View File

@ -117,6 +117,14 @@ public:
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
/** Returns the host id of this peer. */ /** Returns the host id of this peer. */
uint32_t getHostId() const { return m_host_id; } uint32_t getHostId() const { return m_host_id; }
// ------------------------------------------------------------------------
/** Returns the ping to this peer from host, if variance is too large
* return 0. */
uint32_t getPing() const
{
return m_enet_peer->roundTripTimeVariance > 20 ?
0 : m_enet_peer->roundTripTime;
}
}; // STKPeer }; // STKPeer

View File

@ -39,6 +39,7 @@
#include "network/protocols/server_lobby.hpp" #include "network/protocols/server_lobby.hpp"
#include "network/server.hpp" #include "network/server.hpp"
#include "network/stk_host.hpp" #include "network/stk_host.hpp"
#include "network/stk_peer.hpp"
#include "states_screens/state_manager.hpp" #include "states_screens/state_manager.hpp"
#include "states_screens/dialogs/network_user_dialog.hpp" #include "states_screens/dialogs/network_user_dialog.hpp"
#include "utils/translation.hpp" #include "utils/translation.hpp"
@ -67,6 +68,9 @@ NetworkingLobby::NetworkingLobby() : Screen("online/networking_lobby.stkgui")
void NetworkingLobby::loadedFromFile() void NetworkingLobby::loadedFromFile()
{ {
m_header = getWidget<LabelWidget>("lobby-text");
assert(m_header != NULL);
m_back_widget = getWidget<IconButtonWidget>("back"); m_back_widget = getWidget<IconButtonWidget>("back");
assert(m_back_widget != NULL); assert(m_back_widget != NULL);
@ -116,6 +120,8 @@ void NetworkingLobby::init()
{ {
Screen::init(); Screen::init();
//I18N: In the networking lobby
m_header->setText(_("Lobby"), false);
m_server_info_height = GUIEngine::getFont()->getDimension(L"X").Height; m_server_info_height = GUIEngine::getFont()->getDimension(L"X").Height;
m_start_button->setVisible(false); m_start_button->setVisible(false);
m_state = LS_CONNECTING; m_state = LS_CONNECTING;
@ -125,7 +131,7 @@ void NetworkingLobby::init()
getWidget("send")->setActive(false); getWidget("send")->setActive(false);
// Connect to server now if we have saved players and not disconnected // Connect to server now if we have saved players and not disconnected
if (!LobbyProtocol::get<LobbyProtocol>() && if (m_joined_server &&
!NetworkConfig::get()->getNetworkPlayers().empty()) !NetworkConfig::get()->getNetworkPlayers().empty())
std::make_shared<ConnectToServer>(m_joined_server)->requestStart(); std::make_shared<ConnectToServer>(m_joined_server)->requestStart();
@ -247,6 +253,8 @@ void NetworkingLobby::onUpdate(float delta)
} }
else else
{ {
if (m_server_peer.expired())
m_server_peer = STKHost::get()->getServerPeerForClient();
core::stringw total_msg; core::stringw total_msg;
for (auto& string : m_server_info) for (auto& string : m_server_info)
{ {
@ -255,12 +263,20 @@ void NetworkingLobby::onUpdate(float delta)
} }
m_text_bubble->setText(total_msg, true); m_text_bubble->setText(total_msg, true);
} }
if (NetworkConfig::get()->isClient() && if (NetworkConfig::get()->isClient())
STKHost::get()->isAuthorisedToControl())
{ {
m_start_button->setVisible(true); if (STKHost::get()->isAuthorisedToControl())
{
m_start_button->setVisible(true);
}
if (auto p = m_server_peer.lock())
{
//I18N: In the networking lobby, display ping when connected
const uint32_t ping = p->getPing();
if (ping != 0)
m_header->setText(_("Lobby (ping: %dms)", ping), false);
}
} }
} // onUpdate } // onUpdate
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -342,6 +358,7 @@ void NetworkingLobby::unloaded()
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void NetworkingLobby::tearDown() void NetworkingLobby::tearDown()
{ {
m_joined_server.reset();
// Server has a dummy network lobby too // Server has a dummy network lobby too
if (!NetworkConfig::get()->isClient()) if (!NetworkConfig::get()->isClient())
return; return;
@ -351,6 +368,7 @@ void NetworkingLobby::tearDown()
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
bool NetworkingLobby::onEscapePressed() bool NetworkingLobby::onEscapePressed()
{ {
m_joined_server.reset();
input_manager->getDeviceManager()->mapFireToSelect(false); input_manager->getDeviceManager()->mapFireToSelect(false);
STKHost::get()->shutdown(); STKHost::get()->shutdown();
return true; // close the screen return true; // close the screen

View File

@ -24,6 +24,7 @@
#include <tuple> #include <tuple>
class Server; class Server;
class STKPeer;
namespace GUIEngine namespace GUIEngine
{ {
@ -62,10 +63,12 @@ private:
NetworkingLobby(); NetworkingLobby();
std::shared_ptr<Server> m_joined_server; std::shared_ptr<Server> m_joined_server;
std::weak_ptr<STKPeer> m_server_peer;
std::vector<core::stringw> m_server_info; std::vector<core::stringw> m_server_info;
int m_server_info_height; int m_server_info_height;
GUIEngine::IconButtonWidget* m_back_widget; GUIEngine::IconButtonWidget* m_back_widget;
GUIEngine::LabelWidget* m_header;
GUIEngine::LabelWidget* m_text_bubble; GUIEngine::LabelWidget* m_text_bubble;
GUIEngine::IconButtonWidget* m_exit_widget; GUIEngine::IconButtonWidget* m_exit_widget;
GUIEngine::IconButtonWidget* m_start_button; GUIEngine::IconButtonWidget* m_start_button;