Removed server creation request (which is now down automatically

from STKHost).
This commit is contained in:
hiker 2015-11-05 23:34:27 +11:00
parent bec317b9ed
commit 847a788a9c
5 changed files with 82 additions and 82 deletions

View File

@ -194,9 +194,16 @@ void ServerLobbyRoomProtocol::registerServer()
std::string rec_success; std::string rec_success;
if (result->get("success", &rec_success) && rec_success == "yes") if (result->get("success", &rec_success) && rec_success == "yes")
{
Log::info("RegisterServer", "Server is now online."); Log::info("RegisterServer", "Server is now online.");
STKHost::get()->setRegistered(true);
}
else else
Log::error("RegisterServer", "Fail to start server."); {
irr::core::stringc error(request->getInfo().c_str());
Log::error("RegisterServer", "%s", error.c_str());
STKHost::get()->setErrorMessage(_("Failed to register server"));
}
} // registerServer } // registerServer

View File

@ -46,9 +46,15 @@ int STKHost::m_max_players = 0;
bool STKHost::m_is_server = false; bool STKHost::m_is_server = false;
STKHost::NetworkType STKHost::m_network_type = STKHost::NETWORK_NONE; STKHost::NetworkType STKHost::m_network_type = STKHost::NETWORK_NONE;
/** \class STKHost
/** \class STKHost. This is the main class for online games. It can be * \brief Represents the local host. It is the main managing point for
* either instantiated as server, or as client. The online game works * networking. It is responsible for sending and receiving messages,
* and keeping track of onnected peers. It also provides some low
* level socket functions (i.e. to avoid that enet adds its headers
* to messages, useful for broadcast in LAN and for stun). It can be
* either instantiated as server, or as client.
* Additionally this object stores information from the various protocols,
* which can be queried by the GUI. The online game works
* closely together with the stk server: a (game) server first connects * closely together with the stk server: a (game) server first connects
* to the stk server and registers itself, clients find the list of servers * to the stk server and registers itself, clients find the list of servers
* from the stk server. They insert a connections request into the stk * from the stk server. They insert a connections request into the stk
@ -180,6 +186,8 @@ void STKHost::init()
m_network = NULL; m_network = NULL;
m_listening_thread = NULL; m_listening_thread = NULL;
m_game_setup = NULL; m_game_setup = NULL;
m_is_registered = false;
m_error_message = "";
m_public_address.lock(); m_public_address.lock();
m_public_address.getData().clear(); m_public_address.getData().clear();
@ -291,7 +299,24 @@ void STKHost::abort()
ProtocolManager::getInstance()->abort(); ProtocolManager::getInstance()->abort();
} // abort } // abort
//----------------------------------------------------------------------------- // --------------------------------------------------------------------
/** Sets an error message for the gui.
*/
void STKHost::setErrorMessage(const irr::core::stringw &message)
{
irr::core::stringc s(message.c_str());
Log::error("STKHost", "%s", s.c_str());
m_error_message = message;
} // setErrorMessage
// --------------------------------------------------------------------
/** Returns the last error (or "" if no error has happened). */
const irr::core::stringw& STKHost::getErrorMessage() const
{
return m_error_message;
} // getErrorMessage
// --------------------------------------------------------------------
/** \brief Try to establish a connection to a given transport address. /** \brief Try to establish a connection to a given transport address.
* \param peer : The transport address which you want to connect to. * \param peer : The transport address which you want to connect to.
* \return True if we're successfully connected. False elseway. * \return True if we're successfully connected. False elseway.

View File

@ -41,16 +41,6 @@ class GameSetup;
class NetworkConsole; class NetworkConsole;
class STKPeer; class STKPeer;
/** \class STKHost
* \brief Represents the local host. It is the main managing point for
* networking. It is responsible for sending and receiving messages,
* and keeping track of onnected peers. It also provides some low
* level socket functions (i.e. to avoid that enet adds its headers
* to messages, useful for broadcast in LAN and for stun).
* This host is either a server host or a client host. A client host is in
* charge of connecting to a server. A server opens a socket for incoming
* connections.
*/
class STKHost class STKHost
{ {
public: public:
@ -99,9 +89,17 @@ private:
/** Maximum number of players on the server. */ /** Maximum number of players on the server. */
static int m_max_players; static int m_max_players;
/** If this is a server, it indicates if this server is registered
* with the stk server. */
bool m_is_registered;
/** If this is a server, the server name. */ /** If this is a server, the server name. */
irr::core::stringw m_server_name; irr::core::stringw m_server_name;
/** An error message, which is set by a protocol to be displayed
* in the GUI. */
irr::core::stringw m_error_message;
enum NetworkType enum NetworkType
{ NETWORK_NONE, NETWORK_WAN, NETWORK_LAN }; { NETWORK_NONE, NETWORK_WAN, NETWORK_LAN };
@ -195,6 +193,9 @@ public:
bool isConnectedTo(const TransportAddress& peer_address); bool isConnectedTo(const TransportAddress& peer_address);
int mustStopListening(); int mustStopListening();
uint16_t getPort() const; uint16_t getPort() const;
void setErrorMessage(const irr::core::stringw &message);
const irr::core::stringw&
getErrorMessage() const;
// -------------------------------------------------------------------- // --------------------------------------------------------------------
/** Returns the current game setup. */ /** Returns the current game setup. */
@ -261,13 +262,6 @@ public:
/** Returns if this instance is a client. */ /** Returns if this instance is a client. */
static bool isclient() { return !m_is_server; } static bool isclient() { return !m_is_server; }
// -------------------------------------------------------------------- // --------------------------------------------------------------------
/** Sets the name of the server if this instance is a server. */
void setServerName(const irr::core::stringw &name)
{
assert(isServer());
m_server_name = name;
}
// --------------------------------------------------------------------
/** Returns the server name. */ /** Returns the server name. */
const irr::core::stringw& getServerName() const const irr::core::stringw& getServerName() const
{ {
@ -275,6 +269,19 @@ public:
return m_server_name; return m_server_name;
} }
// -------------------------------------------------------------------- // --------------------------------------------------------------------
/** Sets if this server is registered with the stk server. */
void setRegistered(bool registered)
{
assert(isServer());
m_is_registered = registered;
} // setRegistered
// --------------------------------------------------------------------
/** Returns if this server is registered with the stk server. */
bool isRegistered() const
{
assert(isServer());
return m_is_registered;
} // isRegistered
}; // class STKHost }; // class STKHost

View File

@ -47,7 +47,6 @@ DEFINE_SCREEN_SINGLETON( CreateServerScreen );
CreateServerScreen::CreateServerScreen() : Screen("online/create_server.stkgui") CreateServerScreen::CreateServerScreen() : Screen("online/create_server.stkgui")
{ {
m_server_creation_request = NULL;
} // CreateServerScreen } // CreateServerScreen
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -119,10 +118,24 @@ void CreateServerScreen::eventCallback(Widget* widget, const std::string& name,
*/ */
void CreateServerScreen::onUpdate(float delta) void CreateServerScreen::onUpdate(float delta)
{ {
if (!m_server_creation_request) return; // If no host has been created, keep on waiting.
if(!STKHost::isNetworking())
return;
// If the request is not ready, wait till it is done. // First check if an error happened while registering the server:
if (!m_server_creation_request->isDone()) // --------------------------------------------------------------
const irr::core::stringw &error = STKHost::get()->getErrorMessage();
if(error!="")
{
SFXManager::get()->quickSound("anvil");
m_info_widget->setErrorColor();
m_info_widget->setText(error, false);
return;
}
// Otherwise wait till we get an answer from the server:
// -----------------------------------------------------
if(!STKHost::get()->isRegistered())
{ {
m_info_widget->setDefaultColor(); m_info_widget->setDefaultColor();
m_info_widget->setText(StringUtils::loadingDots(_("Creating server")), m_info_widget->setText(StringUtils::loadingDots(_("Creating server")),
@ -130,21 +143,10 @@ void CreateServerScreen::onUpdate(float delta)
return; return;
} }
// Now the request has been executed.
// ---------------------------------- // Go to lobby screen now
if (m_server_creation_request->isSuccess()) // ----------------------
{
new ServerInfoDialog(m_server_creation_request->getCreatedServerID(),
true);
}
else
{
SFXManager::get()->quickSound("anvil");
m_info_widget->setErrorColor();
m_info_widget->setText(m_server_creation_request->getInfo(), false);
}
delete m_server_creation_request;
m_server_creation_request = NULL;
} // onUpdate } // onUpdate
@ -189,36 +191,11 @@ void CreateServerScreen::createServer()
STKHost::setMaxPlayers(max_players); STKHost::setMaxPlayers(max_players);
STKHost::create(name); STKHost::create(name);
// Now must be WAN: forward request to the stk server
m_server_creation_request = new ServerCreationRequest();
PlayerManager::setUserDetails(m_server_creation_request, "create",
Online::API::SERVER_PATH);
m_server_creation_request->addParameter("name", name);
m_server_creation_request->addParameter("max_players", max_players);
m_server_creation_request->queue();
} // createServer } // createServer
// ----------------------------------------------------------------------------
/** Callbacks from the online create server request.
*/
void CreateServerScreen::ServerCreationRequest::callback()
{
if (isSuccess())
{
// Must be a WAN server
Server *server = new Server(*getXMLData()->getNode("server"),
/*is lan*/false);
ServersManager::get()->addServer(server);
m_created_server_id = server->getServerId();
} // isSuccess
} // callback
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void CreateServerScreen::tearDown() void CreateServerScreen::tearDown()
{ {
delete m_server_creation_request;
m_server_creation_request = NULL;
} // tearDown } // tearDown

View File

@ -46,22 +46,6 @@ private:
GUIEngine::IconButtonWidget * m_create_widget; GUIEngine::IconButtonWidget * m_create_widget;
GUIEngine::IconButtonWidget * m_cancel_widget; GUIEngine::IconButtonWidget * m_cancel_widget;
// --------------------------------------------------------------------
class ServerCreationRequest : public Online::XMLRequest
{
virtual void callback();
uint32_t m_created_server_id;
public:
const uint32_t getCreatedServerID() const
{
assert(isDone());
return m_created_server_id;
} // getCreatedServerID
}; // ServerCreationRequest
// --------------------------------------------------------------------
ServerCreationRequest *m_server_creation_request;
void createServer(); void createServer();
public: public: