Simplified ConnectToPeer (no more fsm).
This commit is contained in:
parent
8585afb713
commit
f2ae36fc65
@ -25,6 +25,9 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
/** One instance of this is started for every peer who tries to
|
||||
* connect to this server.
|
||||
*/
|
||||
class ConnectToPeer : public Protocol, public CallbackObject
|
||||
{
|
||||
protected:
|
||||
|
@ -115,10 +115,10 @@ void ConnectToServer::asynchronousUpdate()
|
||||
}
|
||||
case GETTING_SELF_ADDRESS:
|
||||
{
|
||||
delete m_current_protocol;
|
||||
delete m_current_protocol; // delete GetPublicAddress
|
||||
m_current_protocol = NULL;
|
||||
|
||||
registerWithSTKServer();
|
||||
registerWithSTKServer(); // Register us with STK server
|
||||
|
||||
if (m_quick_join)
|
||||
{
|
||||
|
@ -39,63 +39,45 @@ GetPeerAddress::~GetPeerAddress()
|
||||
// ----------------------------------------------------------------------------
|
||||
void GetPeerAddress::setup()
|
||||
{
|
||||
m_state = NONE;
|
||||
m_request = NULL;
|
||||
m_address.clear();
|
||||
|
||||
m_request = new Online::XMLRequest();
|
||||
PlayerManager::setUserDetails(m_request, "get",
|
||||
Online::API::SERVER_PATH);
|
||||
m_request->addParameter("peer_id", m_peer_id);
|
||||
|
||||
Online::RequestManager::get()->addRequest(m_request);
|
||||
} // setup
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void GetPeerAddress::asynchronousUpdate()
|
||||
{
|
||||
if (m_state == NONE)
|
||||
{
|
||||
m_request = new Online::XMLRequest();
|
||||
PlayerManager::setUserDetails(m_request, "get",
|
||||
Online::API::SERVER_PATH);
|
||||
m_request->addParameter("peer_id", m_peer_id);
|
||||
|
||||
Online::RequestManager::get()->addRequest(m_request);
|
||||
m_state = REQUEST_PENDING;
|
||||
}
|
||||
else if (m_state == REQUEST_PENDING && m_request->isDone())
|
||||
if (m_request->isDone())
|
||||
{
|
||||
const XMLNode * result = m_request->getXMLData();
|
||||
std::string rec_success;
|
||||
delete m_request;
|
||||
m_request = NULL;
|
||||
|
||||
if(result->get("success", &rec_success))
|
||||
std::string success;
|
||||
if(result->get("success", &success) && success == "yes")
|
||||
{
|
||||
if (rec_success == "yes")
|
||||
{
|
||||
uint32_t ip;
|
||||
result->get("ip", &ip);
|
||||
m_address.setIP(ip);
|
||||
uint32_t ip;
|
||||
result->get("ip", &ip);
|
||||
m_address.setIP(ip);
|
||||
|
||||
uint16_t port;
|
||||
if (m_address.getIP() ==
|
||||
STKHost::get()->getPublicAddress().getIP())
|
||||
result->get("private_port", &port);
|
||||
else
|
||||
result->get("port", &port);
|
||||
m_address.setPort(port);
|
||||
|
||||
Log::debug("GetPeerAddress", "Address gotten successfully.");
|
||||
}
|
||||
uint16_t port;
|
||||
if (m_address.getIP() == STKHost::get()->getPublicAddress().getIP())
|
||||
result->get("private_port", &port);
|
||||
else
|
||||
{
|
||||
Log::error("GetPeerAddress", "Fail to get address.");
|
||||
}
|
||||
result->get("port", &port);
|
||||
m_address.setPort(port);
|
||||
|
||||
Log::debug("GetPeerAddress", "Peer address retrieved.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Log::error("GetPeerAddress", "Fail to get address.");
|
||||
Log::error("GetPeerAddress", "Failed to get peer address.");
|
||||
}
|
||||
m_state = DONE;
|
||||
}
|
||||
else if (m_state == DONE)
|
||||
{
|
||||
m_state = EXITING;
|
||||
delete m_request;
|
||||
m_request = NULL;
|
||||
requestTerminate();
|
||||
}
|
||||
} // asynchronousUpdate
|
||||
|
@ -30,15 +30,6 @@ private:
|
||||
uint32_t m_peer_id;
|
||||
Online::XMLRequest* m_request;
|
||||
|
||||
enum STATE
|
||||
{
|
||||
NONE,
|
||||
REQUEST_PENDING,
|
||||
DONE,
|
||||
EXITING
|
||||
};
|
||||
STATE m_state;
|
||||
|
||||
/** Stores the address found. Used in a callback from the parent protocol
|
||||
* to get the result. */
|
||||
TransportAddress m_address;
|
||||
|
Loading…
x
Reference in New Issue
Block a user