Exemplo n.º 1
0
void Maze::processAI()
{
	std::cout << "DEBUG: Starting Maze::processAI" << std::endl;

	AIAgent agent(0, *this);

	{
		boost::mutex::scoped_lock lock(players_mutex_);
		players_[agent.getPlayerId()] = agent.getPlayer();
	}

	GameMessage msg(GameMessage::GC_UPDATE_NOTIFY, agent.getPlayer().get());
	broadcast(msg);

	while (true)
    {
        try
        {
			if (agent.handleTick())
				break;

            boost::this_thread::sleep(boost::posix_time::milliseconds(100));
        }
        catch(boost::thread_interrupted &)
        {
			std::cout << "DEBUG: Ending Maze::processAI" << std::endl;
            return;
        }
    }

	clearSessions();
}
Exemplo n.º 2
0
void Selector::run()
{
	int result = 0;
	timeval tv = {3, 0};
	FD_SET readFds;
	FD_ZERO(&readFds);

	SessionManager *sm = SessionManager::getInstance();

	CommunicatioInformation tcpCi = _acceptor.getSocket().getCommunicationInformation();
	
	CommunicatioInformation udpCi = _udpAcceptor.getCommunicationInformation();
	
	_connectSessons.insert(make_pair(tcpCi.generateKeyForSocket(), _acceptor.getSocket()));
	
	_connectSessons.insert(make_pair(udpCi.generateKeyForSocket(), _udpAcceptor));

	map<string, SocketSession>::iterator iter  = _connectSessons.begin();
	
	isRunning = true;
	
	while (isRunning)
	{
		FD_ZERO(&readFds);

		
		
		iter  = _connectSessons.begin();
			
		while (iter != _connectSessons.end())
		{
			FD_SET(iter->second.getSession().getHandle(), &readFds);
			iter++;
		}

		result = select(0, &readFds, NULL, NULL, &tv);
		if (result == 0)
		{
			continue;
		}

		if (isRunning == false)
		{
			break;
		}


		if (FD_ISSET(_acceptor.getSocket().getHandle(), &readFds))
		{
			printDebugInfo("New Connection By TCP Service Accept");

			AsyncSocket session = _acceptor.acceptSession();
			
			CommunicatioInformation sCi = session.getCommunicationInformation();
			
			//iter = _connectSessons.find(sCi.generateKeyForSocket());
			//if (iter != _connectSessons.end())
			//{
			//	iter->second.getSession().close();
			//	printDebugInfo("Öظ´Á¬½Ó..........");
			//	_connectSessons.erase(iter);
			//}

			_connectSessons.insert(make_pair(sCi.generateKeyForSocket(), session));
			
			printDebugInfo("New Connection By TCP Server Accept");
			
		
		
		}else if (FD_ISSET(_udpAcceptor.getHandle(), &readFds))
		{
			printDebugInfo("New Message By UDP Server Accept");
			
			SocketSession ss(_udpAcceptor);
			
			handleData(ss);
		}
		else
		{
			iter = _connectSessons.begin();
			
			printDebugInfo("Client send message to the server in tcp mode");
			
			while (iter != _connectSessons.end())
			{
				SocketSession ss = iter->second;

				if (FD_ISSET(ss.session.getHandle(), &readFds))
				{
					handleData(ss);

				}
				iter++;
			}

			clearDisconnectionSession();

		}

		
	}

	clearSessions();
}