Ejemplo n.º 1
0
void dispatchMessage(ClientsContainer * container, Buffer * message, int senderId)
{
    for(int i = 0 ; i < container->list->getSize() ; i++)
    {
        if(i != senderId)
        {
            logger.printDebug("dispatching ...");
            if(sendBuffer(container->list->get(i)->socket,message))
            {
                logger.printLog("Client disconnected !");
                killClient(container,i);
            }
        }
    }
}
Ejemplo n.º 2
0
BtsSpawnClient::BtsSpawnClient(QObject *parent)
	:BtsClient(parent)
{
	p = new BtsSpawnClient_private();

	p->autorestart = false;
	p->cur_port = 0;
	p->host = "127.0.0.1";
	randomize();

	p->clientProc = nullptr;

	p->forceKillTimer = new QTimer(this);
	p->forceKillTimer->setSingleShot(true);
	p->forceKillTimer->setInterval(2500);
	connect(p->forceKillTimer, SIGNAL(timeout()), this, SLOT(killClient()));
}
Ejemplo n.º 3
0
void checkForInputs(CheckDataSet data)
{
    Buffer workExchangeBuffer; // use a copy to keep the size
    workExchangeBuffer.pointer = data.exchangeBuffer->pointer;
    
    while(1)
    {
        data.container->containerMutex->lock();
        data.container->selector->wait(sf::milliseconds(100)); // waits for data, 100ms timeout (give a chance to unlock other threads)
        for(int i = 0 ; i < data.container->list->getSize() ; i++)
        {
            if(data.container->list->get(i)->isReady && 
               data.container->selector->isReady(*data.container->list->get(i)->socket))
            {
                if(receiveBuffer(data.container->list->get(i)->socket,&workExchangeBuffer,data.exchangeBuffer->size))
                {
                    logger.printLog("Client disconnected !");
                    killClient(data.container,i);
                }
                if(workExchangeBuffer.size > 0)
                {
                    logger.printDebug("Got data, dispatching");
                    dispatchMessage(data.container,&workExchangeBuffer,i);                
                }
            }
        }
        data.container->containerMutex->unlock();

        if(checkStopThreads())
        {
            return;
        }
        sf::sleep(sf::milliseconds(1)); // give time for the other threads
        
    }    
}
Ejemplo n.º 4
0
void killClientMutexed(ClientsContainer * container, int id)
{
    container->containerMutex->lock();
    killClient(container,id);
    container->containerMutex->unlock();
}