Beispiel #1
0
void start_connection(){

	// initialization require for conestion control
	// intialize the starting cwnd
	// cwnd  = 1;
	// prev_cwnd = cwnd;
	// ssthreshold = MAX_SEQ_N/2;

	//intializing valid_timer
	timer_n_index = cwnd;
	itimer.it_interval = timeout_tv;
	itimer.it_value = timeout_tv;

	int i;
	for(i=0; i < MAX_SEQ_N; i++)
		timers_status[i] = -1;

	open_file(file_name);

	if (file == NULL){ // can't open file
		filesize = -1;
		hand_shake();
	}else {
		filesize = calc_file_size();
		hand_shake();
		rdt();
	}
	printf("operation [completed]\n");

}
	//Create from random
	DNA(int iLength){
		std::random_device rdt;
		std::mt19937 mtt(rdt());

		//random value within ascii characters
		std::uniform_int_distribution<int> distt(32, 128);

		//Populate this new array with random char values
		for (int i = 0; i < iLength; ++i){
			cGenes.push_back((char)distt(mtt));
		}

		//Init fitness and mutation values
		fFitness = 0.0f, fMutation = 0.01f;
	};
	//Mutate genes
	void Mutate(){
		std::random_device rdt;
		std::mt19937 mtt(rdt());

		//random value 0 - 1
		std::uniform_real_distribution<double> distt(0, 1);

		//random char value
		std::uniform_int_distribution<int> distt2(32, 128);

		for (int i = 0; i < cGenes.size(); ++i) {
			double t = distt(mtt);
			if (t < fMutation) {
				cGenes[i] = distt2(mtt);
			}
		}
	};
	//Create from parents
	DNA(std::shared_ptr<DNA> parent1, std::shared_ptr<DNA> parent2){
		std::random_device rdt;
		std::mt19937 mtt(rdt());

		//random value within gene size
		std::uniform_int_distribution<int> distt(0, parent1->GetGeneSize());

		/*Set a midpoint for deciding which parent to take gene from.
		Alternatively this could be done by doing 50/50 chance
		on each gene */
		int m = distt(mtt);

		//Begin filling cGenes array TODO: Ensure genes pushed in correct order
		for (int i = 0; i < parent1->GetGeneSize(); ++i){
			if (i > m){
				cGenes.push_back(parent1->GetGeneAt(i));
			} else {
				cGenes.push_back(parent2->GetGeneAt(i));
			}
		}

		//Initiate fitness and mutation
		fFitness = 0.0f, fMutation = 0.01f;
	};
Beispiel #5
0
int 
Server::main()
{
#ifndef WINDOOF
  signal(SIGPIPE,sigPipeHandler);
#endif
  signal(SIGTERM,sigTermHandler);
  signal(SIGINT,sigTermHandler);

  NetStreamBufServer listener(m_config.m_port);
  listener.init();
  listener.newConnection.connect(SigC::slot(*this,&Server::handleNewConnection));
  listener.dataAvailable.connect(SigC::slot(*this,&Server::handleDataAvailable));
  listener.connectionClosed.connect(SigC::slot(*this,&Server::handleConnectionClosed));

  if (!m_config.m_useMetaServer)
    m_config.m_metaServer.clear();
  else{
    if (m_config.m_myAddress.empty())
      /* myAddress not set => we only report our port and the metaserver will use the ip
	 from which it was connected (if the server is behind a nat-firewall this means
	 that the nat firewall must redirect this port to the server) */
      m_maddr.port=m_config.m_port;
    else{
      /* myAddress is set => we report it to the metaserver (if the address contains a :
	 the port is assumed to follow the :
      */
      m_maddr.adr=m_config.m_myAddress;
      std::string::size_type pos(m_maddr.adr.find_first_of(':'));
      if (pos!=std::string::npos) {
	if (pos+1<m_maddr.adr.size())
	  stringToAny(std::string(m_maddr.adr,pos+1),m_maddr.port);
	else
	  m_maddr.port=m_config.m_port;
	m_maddr.adr=std::string(m_maddr.adr,0,pos);
      }
    }
  }
  const std::string &msURI(m_config.m_metaServer);
  if (!msURI.empty()) {
    try {
      MetaServer metaServer(msURI.c_str());
      RegisterServer reg;
      reg.host=m_maddr;
      ServerRegistered answer;
      metaServer.rpc(reg,answer);
      std::cerr << "Metaserver answered !:\nRegistered: " << answer.registered << " , secret:"<<answer.secret<<std::endl;
      m_msecret=answer.secret;

      updateMetaserver();
    }catch(...){
      DOPE_WARN("Could not connect to Metaserver\n");
    }
  }
  
  TimeStamp start;
  start.now();
  TimeStamp oldTime;
  TimeStamp newTime;
  TimeStamp stepSize(0,11111); // ~90Hz
  TimeStamp frameSize(stepSize);
  TimeStamp dt;
  TimeStamp null;
  TimeStamp timeOut;
  oldTime.now();
  unsigned frames=0;
  while (!quit) {
    listener.select(&null); // test for input and emit corresponding signals
    newTime.now();
    dt=newTime-oldTime;
    // consume remaining time (this is the end of one frame)
    while(dt<frameSize) {
      timeOut=(frameSize-dt);
      listener.select(&timeOut);
      newTime.now();
      dt=newTime-oldTime;
    }

#ifdef ADIC_DEBUG_TIMING
    // todo remove again
    // last frame size was dt
    // and it should have been frameSize
    std::cerr << "\nLast frame took: "
	      << (R(dt.getSec())+(R(dt.getUSec())/1000000))
	      << " and should have taken: "
	      << (R(frameSize.getSec())+(R(frameSize.getUSec())/1000000));
#endif

    frameSize=(dt-frameSize);
    int eframes=1;
    while (frameSize>stepSize) {
      ++eframes;
      frameSize-=stepSize;
    }
    frameSize=stepSize-frameSize;

#ifdef ADIC_DEBUG_TIMING
    // todo remove again
    std::cerr << "\nFramesize: "<< (R(frameSize.getSec())+(R(frameSize.getUSec())/1000000));
    if (eframes>1) {
      DOPE_WARN("\nmachine too slow: calculate "<<eframes<<" frames at once");
    }
#endif

    // start of one frame
    R rdt(R(stepSize.getSec())+R(stepSize.getUSec())/1000000);
    for (int f=0;f<eframes;++f)
      m_game.step(rdt);

    // todo perhaps choose different frames for different clients
    if (!(frames%m_config.m_broadcastFreq))
      broadcastGame();
    // check for win condition
    TeamID wt;
    int winner(m_game.getWinner(wt));
    if (winner) {
      if (winner==2)
	std::cout << "\nThe game ended in a draw\n";
      else
	// the winner is
	std::cout << "\nTeam \""<<m_game.getTeams()[wt].name << "\" wins\n";
      EndGame msg;
      msg.reason=winner;
      msg.winner=wt;
      broadcast(msg);
      restart();
      
    }
    
    oldTime=newTime;
    ++frames;
    dt=newTime-start;
    R uptime=R(dt.getSec())+(R(dt.getUSec())/1000000);
    std::cout << "\rUp: " << std::fixed << std::setprecision(2) << std::setw(8) << uptime 
	      << " FPS: " << std::setw(6) << R(frames)/uptime 
	      << " Frame: " << std::setw(8) << frames;
  }
  connections.clear();

  if (!m_msecret.empty()) {
    try {
      MetaServer metaServer(msURI.c_str());
      ServerExit exitmsg;
      exitmsg.host=m_maddr;
      exitmsg.secret=m_msecret;
      
      Result answer;
      metaServer.rpc(exitmsg,answer);
      answer.print();
    }catch(...){
      DOPE_WARN("Could not connect to Metaserver\n");
    }
  }
  return 0;
}
Beispiel #6
0
	shared_ptr<RDTravmap> Mapper2d::
	CreateRDTravmap() const
	{
		shared_ptr<RDTravmap> rdt(new RDTravmap(m_travmap));
		return rdt;
	}