Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 10, 2008, 10:18:33 PM (16 years ago)
Author:
scheusso
Message:

some small adjustment with packetmap mutex
dedicated server tickrate limit works now:
configuration in orxonox.ini under [GSDedicate] → tickrate_

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/objecthierarchy2/src/orxonox/gamestates/GSDedicated.cc

    r2171 r2175  
    3333#include "core/Core.h"
    3434#include "core/Iterator.h"
     35#include "core/CoreIncludes.h"
     36#include "core/ConfigValueIncludes.h"
     37#include "util/Sleep.h"
    3538#include "network/Server.h"
    3639#include "objects/Tickable.h"
     40
     41const unsigned int  DEFAULT_DEDICATED_SERVER_TICKRATE = 25;
     42const float         MIN_WIN32_SLEEP_TIME = 0.01; // scheduler limited
    3743
    3844namespace orxonox
     
    4248        , server_(0)
    4349    {
     50        RegisterObject(GSDedicated);
     51       
     52        this->setConfigValues();
    4453    }
    4554
     
    5362
    5463        this->server_ = new Server(CommandLine::getValue("port"));
    55         COUT(0) << "Loading scene in server mode" << std::endl;
     64        COUT(0) << "Loading scene in dedicated server mode" << std::endl;
    5665
    5766        GSLevel::enter(0);
     
    7281    void GSDedicated::ticked(const Clock& time)
    7382    {
     83        static int timeSinceLastTick = 0; // in microseconds
     84        const int tickPeriod = 1000000. / this->tickrate_; // in microseconds
     85       
    7486        GSLevel::ticked(time);
    75         server_->tick(time.getDeltaTime());
     87       
     88        timeSinceLastTick += time.getDeltaTimeMicroseconds();
     89        if ( timeSinceLastTick >= tickPeriod )
     90        {
     91            server_->tick( timeSinceLastTick );
     92            //timeSinceLastTick -= static_cast<unsigned int>( timeSinceLastTick / tickPeriod ) * tickPeriod;
     93            timeSinceLastTick = 0;
     94        }
     95        else
     96        {
     97            unsigned int sleepTime;
     98           
     99#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32
     100            if ( tickPeriod-timeSinceLastTick < MIN_WIN32_SLEEP_TIME )
     101                sleepTime = MIN_WIN32_SLEEP_TIME*1000000;
     102            else
     103                sleepTime = tickPeriod - timeSinceLastTick;
     104            msleep( sleepTime / 1000 );
     105           
     106#else /* unix */
     107            sleepTime = tickPeriod - timeSinceLastTick;
     108            usleep( sleepTime );
     109#endif
     110           
     111        }
     112       
    76113        this->tickChild(time);
    77114    }
     115   
     116    void GSDedicated::setConfigValues()
     117    {
     118        SetConfigValue ( tickrate_, DEFAULT_DEDICATED_SERVER_TICKRATE );
     119    }
    78120}
Note: See TracChangeset for help on using the changeset viewer.