Move lan network socket to thread main loop, fixed leaking of it too
Also call enet_deinitialize when destroy STKHost
This commit is contained in:
parent
e393e3d4f0
commit
4ab823cfbc
@ -299,7 +299,6 @@ void STKHost::init()
|
|||||||
{
|
{
|
||||||
m_shutdown = false;
|
m_shutdown = false;
|
||||||
m_network = NULL;
|
m_network = NULL;
|
||||||
m_lan_network = NULL;
|
|
||||||
m_game_setup = NULL;
|
m_game_setup = NULL;
|
||||||
m_is_registered = false;
|
m_is_registered = false;
|
||||||
m_error_message = "";
|
m_error_message = "";
|
||||||
@ -350,6 +349,7 @@ STKHost::~STKHost()
|
|||||||
stopListening();
|
stopListening();
|
||||||
|
|
||||||
delete m_network;
|
delete m_network;
|
||||||
|
enet_deinitialize();
|
||||||
} // ~STKHost
|
} // ~STKHost
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -493,19 +493,22 @@ void STKHost::mainLoop()
|
|||||||
ENetEvent event;
|
ENetEvent event;
|
||||||
ENetHost* host = m_network->getENetHost();
|
ENetHost* host = m_network->getENetHost();
|
||||||
|
|
||||||
if(NetworkConfig::get()->isServer() &&
|
// A separate network connection (socket) to handle LAN requests.
|
||||||
|
Network* lan_network = NULL;
|
||||||
|
|
||||||
|
if (NetworkConfig::get()->isServer() &&
|
||||||
(NetworkConfig::get()->isLAN() || NetworkConfig::get()->isPublicServer()) )
|
(NetworkConfig::get()->isLAN() || NetworkConfig::get()->isPublicServer()) )
|
||||||
{
|
{
|
||||||
TransportAddress address(0, NetworkConfig::get()->getServerDiscoveryPort());
|
TransportAddress address(0, NetworkConfig::get()->getServerDiscoveryPort());
|
||||||
ENetAddress eaddr = address.toEnetAddress();
|
ENetAddress eaddr = address.toEnetAddress();
|
||||||
m_lan_network = new Network(1, 1, 0, 0, &eaddr);
|
lan_network = new Network(1, 1, 0, 0, &eaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (m_exit_flag.test_and_set())
|
while (m_exit_flag.test_and_set())
|
||||||
{
|
{
|
||||||
if(m_lan_network)
|
if (lan_network)
|
||||||
{
|
{
|
||||||
handleDirectSocketRequest();
|
handleDirectSocketRequest(lan_network);
|
||||||
} // if discovery host
|
} // if discovery host
|
||||||
|
|
||||||
while (enet_host_service(host, &event, 20) != 0)
|
while (enet_host_service(host, &event, 20) != 0)
|
||||||
@ -552,9 +555,10 @@ void STKHost::mainLoop()
|
|||||||
|
|
||||||
// notify for the event now.
|
// notify for the event now.
|
||||||
pm->propagateEvent(stk_event);
|
pm->propagateEvent(stk_event);
|
||||||
|
|
||||||
} // while enet_host_service
|
} // while enet_host_service
|
||||||
} // while m_exit_flag.test_and_set()
|
} // while m_exit_flag.test_and_set()
|
||||||
|
delete lan_network;
|
||||||
Log::info("STKHost", "Listening has been stopped");
|
Log::info("STKHost", "Listening has been stopped");
|
||||||
} // mainLoop
|
} // mainLoop
|
||||||
|
|
||||||
@ -567,13 +571,13 @@ void STKHost::mainLoop()
|
|||||||
* message is received, will answer with a message containing server details
|
* message is received, will answer with a message containing server details
|
||||||
* (and sender IP address and port).
|
* (and sender IP address and port).
|
||||||
*/
|
*/
|
||||||
void STKHost::handleDirectSocketRequest()
|
void STKHost::handleDirectSocketRequest(Network* lan_network)
|
||||||
{
|
{
|
||||||
const int LEN=2048;
|
const int LEN=2048;
|
||||||
char buffer[LEN];
|
char buffer[LEN];
|
||||||
|
|
||||||
TransportAddress sender;
|
TransportAddress sender;
|
||||||
int len = m_lan_network->receiveRawPacket(buffer, LEN, &sender, 1);
|
int len = lan_network->receiveRawPacket(buffer, LEN, &sender, 1);
|
||||||
if(len<=0) return;
|
if(len<=0) return;
|
||||||
BareNetworkString message(buffer, len);
|
BareNetworkString message(buffer, len);
|
||||||
std::string command;
|
std::string command;
|
||||||
@ -600,7 +604,7 @@ void STKHost::handleDirectSocketRequest()
|
|||||||
s.addUInt16(sender.getPort());
|
s.addUInt16(sender.getPort());
|
||||||
s.addUInt16((uint16_t)race_manager->getMinorMode());
|
s.addUInt16((uint16_t)race_manager->getMinorMode());
|
||||||
s.addUInt8((uint8_t)race_manager->getDifficulty());
|
s.addUInt8((uint8_t)race_manager->getDifficulty());
|
||||||
m_lan_network->sendRawPacket(s, sender);
|
lan_network->sendRawPacket(s, sender);
|
||||||
} // if message is server-requested
|
} // if message is server-requested
|
||||||
else if (command == "connection-request")
|
else if (command == "connection-request")
|
||||||
{
|
{
|
||||||
|
@ -67,9 +67,6 @@ private:
|
|||||||
/** ENet host interfacing sockets. */
|
/** ENet host interfacing sockets. */
|
||||||
Network* m_network;
|
Network* m_network;
|
||||||
|
|
||||||
/** A separate network connection (socket) to handle LAN requests. */
|
|
||||||
Network *m_lan_network;
|
|
||||||
|
|
||||||
/** Network console */
|
/** Network console */
|
||||||
NetworkConsole *m_network_console;
|
NetworkConsole *m_network_console;
|
||||||
|
|
||||||
@ -110,7 +107,7 @@ private:
|
|||||||
STKHost(const irr::core::stringw &server_name);
|
STKHost(const irr::core::stringw &server_name);
|
||||||
virtual ~STKHost();
|
virtual ~STKHost();
|
||||||
void init();
|
void init();
|
||||||
void handleDirectSocketRequest();
|
void handleDirectSocketRequest(Network* lan_network);
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
void mainLoop();
|
void mainLoop();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user