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_

Location:
code/branches/objecthierarchy2/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • code/branches/objecthierarchy2/src/network/packet/Packet.cc

    r2171 r2175  
    129129      return false;
    130130    }
    131     // Assures we don't create a packet and destroy it right after in another thread
    132     // without having a reference in the packetMap_
    133     boost::recursive_mutex::scoped_lock lock(Packet::packetMap_mutex);
    134131    // We deliver ENet the data address so that it doesn't memcpy everything again.
    135132    // --> We have to delete data_ ourselves!
     
    138135    // Add the packet to a global list so we can access it again once enet calls our
    139136    // deletePacket method. We can of course only give a one argument function to the ENet C library.
    140     packetMap_[(size_t)(void*)enetPacket_] = this;
     137    {
     138      // Assures we don't create a packet and destroy it right after in another thread
     139      // without having a reference in the packetMap_
     140      boost::recursive_mutex::scoped_lock lock(Packet::packetMap_mutex);
     141      packetMap_[(size_t)(void*)enetPacket_] = this;
     142    }
    141143  }
    142144#ifndef NDEBUG
  • 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}
  • code/branches/objecthierarchy2/src/orxonox/gamestates/GSDedicated.h

    r2171 r2175  
    3939    class _OrxonoxExport GSDedicated : public GameState<GSRoot>, public GSLevel
    4040    {
     41    friend class ClassIdentifier<GSDedicated>;
    4142    public:
    4243        GSDedicated();
    4344        ~GSDedicated();
     45       
    4446
    4547    private:
     
    4749        void leave();
    4850        void ticked(const Clock& time);
     51       
     52        void setConfigValues();
    4953
    5054        Server*      server_;
     55        unsigned int tickrate_;
    5156    };
    5257}
Note: See TracChangeset for help on using the changeset viewer.