Split multiplayer command
better split into multiplayer-connect multiplayer-disconnect miltiplayer-refreshserverlist
This commit is contained in:
parent
1e1326d8f3
commit
b21bb90ae5
1 changed files with 85 additions and 64 deletions
|
@ -368,83 +368,100 @@ private:
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// handle command "multiplayer"
|
// handle command "multiplayer-connect"
|
||||||
// command: connect|disconnect|refreshserverlist
|
// args:
|
||||||
//
|
|
||||||
// connect args:
|
|
||||||
// server: servername to connect (mandatory)
|
// server: servername to connect (mandatory)
|
||||||
// txport: outgoing port number (default: 5000)
|
// txport: outgoing port number (default: 5000)
|
||||||
// rxport: incoming port number (default: 5000)
|
// rxport: incoming port number (default: 5000)
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
static bool do_multiplayer_connect(const SGPropertyNode * arg) {
|
||||||
|
FGMultiplayMgr * self = (FGMultiplayMgr*) globals->get_subsystem("mp");
|
||||||
|
if (!self) {
|
||||||
|
SG_LOG(SG_NETWORK, SG_WARN, "Multiplayer subsystem not available.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
string servername = arg->getStringValue("servername", "");
|
||||||
|
if (servername.empty()) {
|
||||||
|
SG_LOG(SG_NETWORK, SG_WARN,
|
||||||
|
"do_multiplayer.connect: no server name given, command ignored.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int port = arg->getIntValue("rxport", -1);
|
||||||
|
if (port > 0 && port <= 0xffff) {
|
||||||
|
fgSetInt("/sim/multiplay/rxport", port);
|
||||||
|
}
|
||||||
|
|
||||||
|
port = arg->getIntValue("txport", -1);
|
||||||
|
if (port > 0 && port <= 0xffff) {
|
||||||
|
fgSetInt("/sim/multiplay/txport", port);
|
||||||
|
}
|
||||||
|
|
||||||
|
servername = servername.substr(0, servername.find_first_of(' '));
|
||||||
|
fgSetString("/sim/multiplay/txhost", servername);
|
||||||
|
self->reinit();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
// handle command "multiplayer-disconnect"
|
||||||
// disconnect args:
|
// disconnect args:
|
||||||
// none
|
// none
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
static bool do_multiplayer_disconnect(const SGPropertyNode * arg) {
|
||||||
|
FGMultiplayMgr * self = (FGMultiplayMgr*) globals->get_subsystem("mp");
|
||||||
|
if (!self) {
|
||||||
|
SG_LOG(SG_NETWORK, SG_WARN, "Multiplayer subsystem not available.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
fgSetString("/sim/multiplay/txhost", "");
|
||||||
|
self->reinit();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
// handle command "multiplayer-refreshserverlist"
|
||||||
// refreshserverlist args:
|
// refreshserverlist args:
|
||||||
// none
|
// none
|
||||||
//
|
//
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
static bool do_multiplayer (const SGPropertyNode * arg)
|
static bool do_multiplayer_refreshserverlist(const SGPropertyNode * arg) {
|
||||||
{
|
FGMultiplayMgr * self = (FGMultiplayMgr*) globals->get_subsystem("mp");
|
||||||
FGMultiplayMgr * self = (FGMultiplayMgr*) globals->get_subsystem("mp");
|
if (!self) {
|
||||||
|
SG_LOG(SG_NETWORK, SG_WARN, "Multiplayer subsystem not available.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const string &command = arg->getStringValue("command", "");
|
FGHTTPClient* http = static_cast<FGHTTPClient*>(globals->get_subsystem("http"));
|
||||||
SG_LOG(SG_NETWORK, SG_WARN, "do_multiplayer: " << command );
|
if (!http) {
|
||||||
if( command == "connect" ) {
|
SG_LOG(SG_IO, SG_ALERT,
|
||||||
string servername = arg->getStringValue("servername", "");
|
"do_multiplayer.refreshserverlist: HTTP client not running");
|
||||||
if( servername.empty() ) {
|
return false;
|
||||||
SG_LOG(SG_NETWORK, SG_WARN, "do_multiplayer.connect: no server name given, command ignored." );
|
}
|
||||||
return false;
|
|
||||||
}
|
|
||||||
int port = arg->getIntValue("rxport", -1 );
|
|
||||||
if( port > 0 && port <= 0xffff ) {
|
|
||||||
fgSetInt( "/sim/multiplay/rxport", port );
|
|
||||||
}
|
|
||||||
|
|
||||||
port = arg->getIntValue("txport", -1 );
|
string url(
|
||||||
if( port > 0 && port <= 0xffff ) {
|
fgGetString("/sim/multiplay/serverlist-url",
|
||||||
fgSetInt( "/sim/multiplay/txport", port );
|
"http://liveries.flightgear.org/mpstatus/mpservers.xml"));
|
||||||
}
|
|
||||||
|
|
||||||
servername = servername.substr( 0, servername.find_first_of(' '));
|
if (url.empty()) {
|
||||||
fgSetString("/sim/multiplay/txhost", servername );
|
SG_LOG(SG_IO, SG_ALERT,
|
||||||
self->reinit();
|
"do_multiplayer.refreshserverlist: no URL given");
|
||||||
return true;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
} else if( command == "disconnect" ) {
|
SGPropertyNode *targetnode = fgGetNode("/sim/multiplay/server-list", true);
|
||||||
fgSetString("/sim/multiplay/txhost", "");
|
SGPropertyNode *completeNode = fgGetNode("/sim/multiplay/got-servers", true);
|
||||||
self->reinit();
|
SGPropertyNode *failureNode = fgGetNode("/sim/multiplay/get-servers-failure", true);
|
||||||
return true;
|
RemoteXMLRequest* req = new RemoteXMLRequest(url, targetnode);
|
||||||
|
req->setCompletionProp(completeNode);
|
||||||
} else if( command == "refreshserverlist" ) {
|
req->setFailedProp(failureNode);
|
||||||
string url(fgGetString("/sim/multiplay/serverlist-url",
|
completeNode->setBoolValue(false);
|
||||||
"http://liveries.flightgear.org/mpstatus/mpservers.xml" ));
|
failureNode->setBoolValue(false);
|
||||||
|
http->makeRequest(req);
|
||||||
if (url.empty()) {
|
return true;
|
||||||
SG_LOG(SG_IO, SG_ALERT, "do_multiplayer.refreshserverlist: no URL given");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
FGHTTPClient* http = static_cast<FGHTTPClient*>(globals->get_subsystem("http"));
|
|
||||||
if (!http) {
|
|
||||||
SG_LOG(SG_IO, SG_ALERT, "do_multiplayer.refreshserverlist: HTTP client not running");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
SGPropertyNode *targetnode = fgGetNode("/sim/multiplay/server-list", true );
|
|
||||||
SGPropertyNode *completeNode = fgGetNode("/sim/multiplay/got-servers", true);
|
|
||||||
SGPropertyNode *failureNode = fgGetNode("/sim/multiplay/get-servers-failure", true);
|
|
||||||
RemoteXMLRequest* req = new RemoteXMLRequest(url, targetnode);
|
|
||||||
req->setCompletionProp( completeNode );
|
|
||||||
req->setFailedProp( failureNode );
|
|
||||||
completeNode->setBoolValue(false);
|
|
||||||
failureNode->setBoolValue(false);
|
|
||||||
http->makeRequest(req);
|
|
||||||
return true;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
SG_LOG(SG_NETWORK, SG_WARN, "FGMultiplayMgr do_multiplayer: command" << command << " unknown. ignored.");
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
@ -457,7 +474,9 @@ FGMultiplayMgr::FGMultiplayMgr()
|
||||||
mInitialised = false;
|
mInitialised = false;
|
||||||
mHaveServer = false;
|
mHaveServer = false;
|
||||||
mListener = NULL;
|
mListener = NULL;
|
||||||
globals->get_commands()->addCommand("multiplayer", do_multiplayer);
|
globals->get_commands()->addCommand("multiplayer-connect", do_multiplayer_connect);
|
||||||
|
globals->get_commands()->addCommand("multiplayer-disconnect", do_multiplayer_disconnect);
|
||||||
|
globals->get_commands()->addCommand("multiplayer-refreshserverlist", do_multiplayer_refreshserverlist);
|
||||||
} // FGMultiplayMgr::FGMultiplayMgr()
|
} // FGMultiplayMgr::FGMultiplayMgr()
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -468,7 +487,9 @@ FGMultiplayMgr::FGMultiplayMgr()
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
FGMultiplayMgr::~FGMultiplayMgr()
|
FGMultiplayMgr::~FGMultiplayMgr()
|
||||||
{
|
{
|
||||||
globals->get_commands()->removeCommand("multiplayer");
|
globals->get_commands()->removeCommand("multiplayer-connect");
|
||||||
|
globals->get_commands()->removeCommand("multiplayer-disconnect");
|
||||||
|
globals->get_commands()->removeCommand("multiplayer-refreshserverlist");
|
||||||
} // FGMultiplayMgr::~FGMultiplayMgr()
|
} // FGMultiplayMgr::~FGMultiplayMgr()
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue