/** 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; }
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]); }
void TCPSession::initial(void) { if(waitConnection(60000)) exit(); }