Exemple #1
0
/**
idle 이 20분 이상된 사용자는 제거한다.
*/
int	MyAcceptor::svc(void)
{
	Config *conf = Config::instance();	

	PAS_NOTICE("MyAcceptor::svc start");	
	myPort = conf->network.listenPort;
	
	while(runFlag)
	{	
		int ret = waitConnection(100000);
		if (ret < 0) {
			ACE_DEBUG ((LM_DEBUG, "Acceptor: select() failed (%d)\n", ret));
			break;
		}
		else if (ret==0) {
			continue;
		}
		
		handleConnection();		

		#ifdef CHECK_MAX_CLIENTS
			if (Config::instance()->process.checkMaxClients)
			{
				if (ClientHandler::numClientHandlers > (unsigned)Config::instance()->process.maxClients )
				{
					PAS_ERROR2("MyAcceptor:: Too many concurent clients (%d). Limit=(%d) by config settting.",
						ClientHandler::numClientHandlers, Config::instance()->process.maxClients);
					return 0;
				}
			}
		#endif
	}
	PAS_NOTICE("MyAcceptor::svc stop");
	return 0;
}
Exemple #2
0
void StationClass::waitConnection(ConnectionDelegate successfulConnected)
{
	waitConnection(successfulConnected, -1, NULL);
}
void serverStateClass::update()
{
    int tmpNumber;

    sf::Event event;
    while(global::window.pollEvent(event))
    {
        if(event.type == sf::Event::Closed)
        {
            global::run = false;
        }
        else if(event.type == sf::Event::KeyPressed)
        {
            if(event.key.code == sf::Keyboard::Escape)
            {
                global::gameStateStack.set(new mainMenuStateClass);
                return;
            }
        }
    }

    if(server.getGameReady() == false)
    {
        global::gameStateStack.set(new mainMenuStateClass);
        return;
    }

    myWidgetManager.update();

    if(playerReady == true)
    {
        action tmpAction;
        sf::Packet newPacket;
        server.update(&newPacket);
        tmpAction = server.getCurrentAction();
        if(currentAction.action != tmpAction.action || currentAction.player != tmpAction.player)
        {
            currentAction = tmpAction;
            printAction();
        }

        if(newPacket.getDataSize() != 0)
        {
            sendToAll(newPacket);
        }
    }

    waitConnection();

    for(std::list<std::shared_ptr<client>>::iterator ite = listClientMainThread.begin(); ite != listClientMainThread.end(); )
    {
        if((*ite)->isConnected == false)
        {
            if((*ite)->player != NO_PLAYER)
            {
                playerIsReady[(*ite)->player] = false;
                playerReady = false;
                --numberOfPlayer;
            }
            else
            {
                --numberOfSpectator;
            }

            nbPlayer->setMessage(intToStr(numberOfPlayer));
            nbSpec->setMessage(intToStr(numberOfSpectator));
            myWidgetManager.widgetHasChanged();

            selector.remove((*ite)->socket);
            listClientMainThread.erase(ite++);
            continue;
        }
        ++ite;
    }

    tmpNumber = server.getMoveForPlayer();
    if(tmpNumber != numberMoveTotal)
    {
        sf::Packet packet;
        numberMoveTotal = tmpNumber;
        packet << static_cast<sf::Uint8>(SET_MOVE_TOTAL);
        packet << static_cast<sf::Uint8>(numberMoveTotal);
        sendToAll(packet);
    }
    tmpNumber = server.getMoveForNumber();
    if(tmpNumber != numberMoveNumber)
    {
        sf::Packet packet;
        numberMoveNumber = tmpNumber;
        packet << static_cast<sf::Uint8>(SET_MOVE_NUMBER);
        packet << static_cast<sf::Uint8>(numberMoveNumber);
        sendToAll(packet);
    }
}
void waitConnections(Socket server, void* (*toDO)(void*),pthread_t threads[]) {
	for(ID id = FIRST_ID; id < MAX_NUMBER_OF_CONNECTION; ++id)
		waitConnection(server, toDO, nextId,threads[nextId]);
}
Exemple #5
0
void TCPSession::initial(void)
{
    if(waitConnection(60000))
        exit();
}