/** Register this client with the STK server. */ void ConnectToServer::registerWithSTKServer() { // Our public address is now known, register details with // STK server. If previous unjoin request is not finished, wait if (!m_previous_unjoin.expired()) { if (ProtocolManager::lock()->isExiting()) return; StkTime::sleep(1); } const TransportAddress& addr = STKHost::get()->getPublicAddress(); Online::XMLRequest *request = new Online::XMLRequest(); NetworkConfig::get()->setServerDetails(request, "join-server-key"); request->addParameter("server-id", m_server->getServerId()); request->addParameter("address", addr.getIP()); request->addParameter("port", addr.getPort()); Crypto::initClientAES(); request->addParameter("aes-key", Crypto::getClientKey()); request->addParameter("aes-iv", Crypto::getClientIV()); Log::info("ConnectToServer", "Registering addr %s", addr.toString().c_str()); // This can be done blocking: till we are registered with the // stk server, there is no need to to react to any other // network requests request->executeNow(); const XMLNode* result = request->getXMLData(); std::string success; if(result->get("success", &success) && success == "yes") { Log::debug("ConnectToServer", "Address registered successfully."); } else { irr::core::stringc error(request->getInfo().c_str()); Log::error("ConnectToServer", "Failed to register client address: %s", error.c_str()); m_state = DONE; } delete request; } // registerWithSTKServer
/** Register this server (i.e. its public address) with the STK server * so that clients can find it. It blocks till a response from the * stk server is received (this function is executed from the * ProtocolManager thread). The information about this client is added * to the table 'server'. */ void ServerLobbyRoomProtocol::registerServer() { Online::XMLRequest *request = new Online::XMLRequest(); const TransportAddress& addr = NetworkConfig::get()->getMyAddress(); #ifdef NEW_PROTOCOL PlayerManager::setUserDetails(request, "register", Online::API::SERVER_PATH); #else PlayerManager::setUserDetails(request, "start", Online::API::SERVER_PATH); #endif request->addParameter("address", addr.getIP() ); request->addParameter("port", addr.getPort() ); request->addParameter("private_port", NetworkConfig::get()->getPrivatePort()); request->addParameter("name", NetworkConfig::get()->getServerName() ); request->addParameter("max_players", UserConfigParams::m_server_max_players ); Log::info("RegisterServer", "Showing addr %s", addr.toString().c_str()); request->executeNow(); const XMLNode * result = request->getXMLData(); std::string rec_success; if (result->get("success", &rec_success) && rec_success == "yes") { Log::info("RegisterServer", "Server is now online."); STKHost::get()->setRegistered(true); } else { irr::core::stringc error(request->getInfo().c_str()); Log::error("RegisterServer", "%s", error.c_str()); STKHost::get()->setErrorMessage(_("Failed to register server")); } } // registerServer