/** \brief Thread function checking if data is received. * This function tries to get data from network low-level functions as * often as possible. When something is received, it generates an * event and passes it to the Network Manager. * \param self : used to pass the ENet host to the function. */ void* STKHost::mainLoop(void* self) { VS::setThreadName("STKHost"); ENetEvent event; STKHost* myself = (STKHost*)(self); ENetHost* host = myself->m_network->getENetHost(); if(NetworkConfig::get()->isServer() && NetworkConfig::get()->isLAN() ) { TransportAddress address(0, 2757); ENetAddress eaddr = address.toEnetAddress(); myself->m_lan_network = new Network(1, 1, 0, 0, &eaddr); } while (!myself->mustStopListening()) { if(myself->m_lan_network) { myself->handleLANRequests(); } // if discovery host while (enet_host_service(host, &event, 20) != 0) { if (event.type == ENET_EVENT_TYPE_NONE) continue; // Create an STKEvent with the event data. This will also // create the peer if it doesn't exist already Event* stk_event = new Event(&event); if (stk_event->getType() == EVENT_TYPE_MESSAGE) Network::logPacket(stk_event->data(), true); Log::verbose("STKHost", "Event of type %d received", (int)(stk_event->getType())); STKPeer* peer = stk_event->getPeer(); if (stk_event->getType() == EVENT_TYPE_CONNECTED) { Log::info("STKHost", "A client has just connected. There are " "now %lu peers.", myself->m_peers.size()); Log::debug("STKHost", "Addresses are : %lx, %lx", stk_event->getPeer(), peer); } // EVENT_TYPE_CONNECTED else if (stk_event->getType() == EVENT_TYPE_MESSAGE) { TransportAddress stk_addr(peer->getAddress()); Log::verbose("NetworkManager", "Message, Sender : %s, message = \"%s\"", stk_addr.toString(/*show port*/false).c_str(), stk_event->data().std_string().c_str()); } // if message event // notify for the event now. ProtocolManager::getInstance()->propagateEvent(stk_event); } // while enet_host_service } // while !mustStopListening free(myself->m_listening_thread); myself->m_listening_thread = NULL; Log::info("STKHost", "Listening has been stopped"); return NULL; } // mainLoop