void NetworkServer::checkForNewClients() {
	std::vector<sf::TcpSocket *> updatedClients = communicator.getClients();
	std::vector<sf::TcpSocket *> newClients;
	std::vector<sf::TcpSocket *> lostClients;
	for(int i=0; i<updatedClients.size(); i++) {
		if(!isInClientList(updatedClients[i]))
			newClients.push_back(updatedClients[i]);
	}
	for(int i=0; i<clients.size(); i++) {
		if(!isClientInUpdatedList(clients[i].tcp, updatedClients))
			lostClients.push_back(clients[i].tcp);
	}
	
	for(int i=0; i<newClients.size(); i++) {
		clients.push_back(ClientInfo());
		clients[clients.size()-1].tcp = newClients[i];
		clients[clients.size()-1].ip = newClients[i]->getRemoteAddress();
		sendTcpBySocket("_CONNECT"+std::to_string(udpSocket.getLocalPort()), clients[clients.size()-1].tcp);
	}
	
	for(int i=0; i<newClients.size(); i++)
		gotNewClient(newClients[i]->getRemoteAddress());
	for(int i=0; i<lostClients.size(); i++)
		lostClient(lostClients[i]->getRemoteAddress());
}
示例#2
0
SensorManager::~SensorManager()
{
    // stop adaptor threads and acquired resources
    for(QMap<QString, DeviceAdaptorInstanceEntry>::const_iterator it = deviceAdaptorInstanceMap_.begin(); it != deviceAdaptorInstanceMap_.end(); ++it)
    {
        releaseDeviceAdaptor(it.key());
    }

    sleep(1); // sleep for seconds so adaptor threads have time to die

    // close open sessions
    for(QMap<QString, SensorInstanceEntry>::const_iterator it = sensorInstanceMap_.begin(); it != sensorInstanceMap_.end(); ++it)
    {
        for(QSet<int>::const_iterator it2 = it.value().sessions_.begin(); it2 != it.value().sessions_.end(); ++it2)
        {
            lostClient(*it2);
        }
    }

    // delete sensors
    for(QMap<QString, SensorInstanceEntry>::iterator it = sensorInstanceMap_.begin(); it != sensorInstanceMap_.end(); ++it)
    {
        if(it.value().sensor_)
        {
            delete it.value().sensor_;
            it.value().sensor_ = 0;
        }
    }

    // delete chains
    for(QMap<QString, ChainInstanceEntry>::iterator it = chainInstanceMap_.begin(); it != chainInstanceMap_.end(); ++it)
    {
        if(it.value().chain_)
        {
            delete it.value().chain_;
            it.value().chain_ = 0;
        }
    }

    // delete adaptors
    for(QMap<QString, DeviceAdaptorInstanceEntry>::iterator it = deviceAdaptorInstanceMap_.begin(); it != deviceAdaptorInstanceMap_.end(); ++it)
    {
        if(it.value().adaptor_)
        {
            delete it.value().adaptor_;
            it.value().adaptor_ = 0;
        }
    }

    delete socketHandler_;
    delete pipeNotifier_;
    if (pipefds_[0]) close(pipefds_[0]);
    if (pipefds_[1]) close(pipefds_[1]);

#ifdef SENSORFW_MCE_WATCHER
    delete mceWatcher_;
#endif //SENSORFW_MCE_WATCHER
}