Changeset 2175
- Timestamp:
- Nov 10, 2008, 10:18:33 PM (16 years ago)
- Location:
- code/branches/objecthierarchy2/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/objecthierarchy2/src/network/packet/Packet.cc
r2171 r2175 129 129 return false; 130 130 } 131 // Assures we don't create a packet and destroy it right after in another thread132 // without having a reference in the packetMap_133 boost::recursive_mutex::scoped_lock lock(Packet::packetMap_mutex);134 131 // We deliver ENet the data address so that it doesn't memcpy everything again. 135 132 // --> We have to delete data_ ourselves! … … 138 135 // Add the packet to a global list so we can access it again once enet calls our 139 136 // 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 } 141 143 } 142 144 #ifndef NDEBUG -
code/branches/objecthierarchy2/src/orxonox/gamestates/GSDedicated.cc
r2171 r2175 33 33 #include "core/Core.h" 34 34 #include "core/Iterator.h" 35 #include "core/CoreIncludes.h" 36 #include "core/ConfigValueIncludes.h" 37 #include "util/Sleep.h" 35 38 #include "network/Server.h" 36 39 #include "objects/Tickable.h" 40 41 const unsigned int DEFAULT_DEDICATED_SERVER_TICKRATE = 25; 42 const float MIN_WIN32_SLEEP_TIME = 0.01; // scheduler limited 37 43 38 44 namespace orxonox … … 42 48 , server_(0) 43 49 { 50 RegisterObject(GSDedicated); 51 52 this->setConfigValues(); 44 53 } 45 54 … … 53 62 54 63 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; 56 65 57 66 GSLevel::enter(0); … … 72 81 void GSDedicated::ticked(const Clock& time) 73 82 { 83 static int timeSinceLastTick = 0; // in microseconds 84 const int tickPeriod = 1000000. / this->tickrate_; // in microseconds 85 74 86 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 76 113 this->tickChild(time); 77 114 } 115 116 void GSDedicated::setConfigValues() 117 { 118 SetConfigValue ( tickrate_, DEFAULT_DEDICATED_SERVER_TICKRATE ); 119 } 78 120 } -
code/branches/objecthierarchy2/src/orxonox/gamestates/GSDedicated.h
r2171 r2175 39 39 class _OrxonoxExport GSDedicated : public GameState<GSRoot>, public GSLevel 40 40 { 41 friend class ClassIdentifier<GSDedicated>; 41 42 public: 42 43 GSDedicated(); 43 44 ~GSDedicated(); 45 44 46 45 47 private: … … 47 49 void leave(); 48 50 void ticked(const Clock& time); 51 52 void setConfigValues(); 49 53 50 54 Server* server_; 55 unsigned int tickrate_; 51 56 }; 52 57 }
Note: See TracChangeset
for help on using the changeset viewer.