Changeset 2531 for code/branches/bugger/src/network
- Timestamp:
- Dec 23, 2008, 11:09:55 PM (16 years ago)
- Location:
- code/branches/bugger
- Files:
-
- 3 deleted
- 13 edited
- 12 copied
Legend:
- Unmodified
- Added
- Removed
-
code/branches/bugger
- Property svn:mergeinfo changed
/code/branches/network (added) merged: 2356 /code/branches/network64 (added) merged: 2210-2211,2245-2247,2255,2307,2309-2312,2316,2355
- Property svn:mergeinfo changed
-
code/branches/bugger/src/network/CMakeLists.txt
r2131 r2531 11 11 PacketBuffer.cc 12 12 Server.cc 13 Synchronisable.cc13 TrafficControl.cc 14 14 Host.cc 15 15 ) 16 16 17 17 ADD_SOURCE_DIRECTORY(NETWORK_SRC_FILES packet) 18 ADD_SOURCE_DIRECTORY(NETWORK_SRC_FILES synchronisable) 19 18 20 19 21 IF(WIN32) -
code/branches/bugger/src/network/Client.cc
r2171 r2531 43 43 #include "Client.h" 44 44 #include "Host.h" 45 #include " Synchronisable.h"45 #include "synchronisable/Synchronisable.h" 46 46 #include "core/CoreIncludes.h" 47 47 #include "packet/Packet.h" -
code/branches/bugger/src/network/ClientInformation.cc
r2171 r2531 45 45 namespace orxonox 46 46 { 47 47 48 48 49 ClientInformation *ClientInformation::head_=0; -
code/branches/bugger/src/network/ClientInformation.h
r2171 r2531 46 46 #include <boost/thread/recursive_mutex.hpp> 47 47 48 48 49 // WATCH OUT: THE CLIENTINFORMATION LIST IS NOT THREADSAFE ANYMORE 49 50 50 51 namespace orxonox 51 52 { 52 static const unsigned int GAMESTATEID_INITIAL = (unsigned int)-1;53 static const unsigned int CLIENTID_UNKNOWN = (unsigned int)-2;54 53 55 54 /** -
code/branches/bugger/src/network/ConnectionManager.cc
r2171 r2531 52 52 #include "util/Sleep.h" 53 53 #include "ClientInformation.h" 54 #include " Synchronisable.h"54 #include "synchronisable/Synchronisable.h" 55 55 #include "packet/ClassID.h" 56 56 -
code/branches/bugger/src/network/GamestateClient.cc
r2176 r2531 35 35 #include "core/BaseObject.h" 36 36 #include "core/Iterator.h" 37 #include "Synchronisable.h" 37 #include "synchronisable/Synchronisable.h" 38 #include "synchronisable/NetworkCallbackManager.h" 38 39 #include "packet/Acknowledgement.h" 39 40 … … 77 78 packet::Gamestate *processed = processGamestate(tempGamestate_); 78 79 // assert(processed); 80 81 //now call the queued callbacks 82 NetworkCallbackManager::callCallbacks(); 83 79 84 if (!processed){ 80 85 sendAck(0); -
code/branches/bugger/src/network/GamestateManager.cc
r2176 r2531 49 49 #include "core/BaseObject.h" 50 50 #include "ClientInformation.h" 51 #include "Synchronisable.h" 51 #include "synchronisable/Synchronisable.h" 52 #include "synchronisable/NetworkCallbackManager.h" 52 53 #include "packet/Acknowledgement.h" 53 54 … … 87 88 // now clear the queue 88 89 gamestateQueue.clear(); 90 //and call all queued callbacks 91 NetworkCallbackManager::callCallbacks(); 89 92 return true; 90 93 } … … 135 138 if(!reference) 136 139 return 0; 137 gs = reference->doSelection(clientID); 138 // gs = new packet::Gamestate(*reference); 140 gs = reference->doSelection(clientID, 10000); 139 141 // gs = new packet::Gamestate(*reference); 140 142 // save the (undiffed) gamestate in the clients gamestate map -
code/branches/bugger/src/network/NetworkPrereqs.h
r2171 r2531 57 57 58 58 //----------------------------------------------------------------------- 59 // Includes 60 //----------------------------------------------------------------------- 61 #include "util/Integers.h" 62 63 64 //----------------------------------------------------------------------- 59 65 // Forward declarations 60 66 //----------------------------------------------------------------------- 61 67 namespace orxonox 62 68 { 69 70 // Constants definition 71 72 static const unsigned int GAMESTATEID_INITIAL = (unsigned int)-1; 73 static const unsigned int CLIENTID_UNKNOWN = (unsigned int)-2; 74 static const uint32_t OBJECTID_UNKNOWN = static_cast<uint32_t>(-1); 75 static const unsigned int SCHED_PRIORITY_OFFSET = -5; 76 77 78 79 63 80 class Client; 64 81 class ClientConnection; … … 70 87 class GamestateManager; 71 88 class GamestateHandler; 89 class NetworkCallbackBase; 90 template <class T> class NetworkCallback; 91 class NetworkCallbackManager; 72 92 class PacketBuffer; 73 93 class Server; 74 94 class ServerFrameListener; 75 95 class Synchronisable; 96 class SynchronisableVariableBase; 97 template <class T> class SynchronisableVariable; 98 template <class T> class SynchronisableVariableBidirectional; 76 99 struct ClientList; 77 100 struct PacketEnvelope; 78 101 struct QueueItem; 79 102 struct syncData; 80 struct synchronisableVariable; 103 class obj; 104 class objInfo; 81 105 namespace packet{ 82 106 class Gamestate; -
code/branches/bugger/src/network/packet/DeleteObjects.cc
r2171 r2531 30 30 #include "DeleteObjects.h" 31 31 #include <enet/enet.h> 32 #include "network/ Synchronisable.h"32 #include "network/synchronisable/Synchronisable.h" 33 33 #include "core/CoreIncludes.h" 34 34 #include <assert.h> -
code/branches/bugger/src/network/packet/Gamestate.cc
r2450 r2531 28 28 29 29 #include "Gamestate.h" 30 #include "network/ClientInformation.h" 31 #include "network/GamestateHandler.h" 30 #include "../GamestateHandler.h" 31 #include "../synchronisable/Synchronisable.h" 32 #include "../TrafficControl.h" 32 33 #include "core/Core.h" 33 34 #include "core/CoreIncludes.h" … … 49 50 50 51 #define PACKET_FLAG_GAMESTATE ENET_PACKET_FLAG_RELIABLE 52 53 TrafficControl Gamestate::trafficControl_; 51 54 52 55 Gamestate::Gamestate() … … 74 77 bool Gamestate::collectData(int id, uint8_t mode) 75 78 { 76 u nsigned int tempsize=0, currentsize=0;79 uint32_t tempsize=0, currentsize=0; 77 80 assert(data_==0); 78 u nsigned int size = calcGamestateSize(id, mode);81 uint32_t size = calcGamestateSize(id, mode); 79 82 80 83 COUT(4) << "G.ST.Man: producing gamestate with id: " << id << std::endl; … … 110 113 111 114 //if(it->doSelection(id)) 112 dataMap_[mem-data_]=(*it); // save the mem location of the synchronisable data 115 if(tempsize!=0) 116 dataMap_.push_back( obj(it->getObjectID(), it->getCreatorID(), tempsize, mem-data_) ); 117 // dataMap_[mem-data_]=(*it); // save the mem location of the synchronisable data 113 118 if(!it->getData(mem, id, mode)) 114 119 return false; // mem pointer gets automatically increased because of call by reference … … 150 155 { 151 156 if (!Core::isMaster()) 152 Synchronisable::fabricate(mem, mode);157 s = Synchronisable::fabricate(mem, mode); 153 158 else 154 159 mem += objectheader->size; 160 assert(s); 155 161 } 156 162 else … … 170 176 } 171 177 172 u nsigned int Gamestate::getSize() const178 uint32_t Gamestate::getSize() const 173 179 { 174 180 assert(data_); … … 255 261 assert(HEADER->compressed); 256 262 COUT(4) << "GameStateClient: uncompressing gamestate. id: " << HEADER->id << ", baseid: " << HEADER->base_id << ", datasize: " << HEADER->datasize << ", compsize: " << HEADER->compsize << std::endl; 257 u nsigned int datasize = HEADER->datasize;258 u nsigned int compsize = HEADER->compsize;259 u nsigned int bufsize;263 uint32_t datasize = HEADER->datasize; 264 uint32_t compsize = HEADER->compsize; 265 uint32_t bufsize; 260 266 // assert(compsize<=datasize); 261 267 bufsize = datasize; … … 306 312 //unsigned char *basep = base->getGs()/*, *gs = getGs()*/; 307 313 uint8_t *basep = GAMESTATE_START(base->data_), *gs = GAMESTATE_START(this->data_); 308 u nsigned int of=0; // pointers offset309 u nsigned int dest_length=0;314 uint32_t of=0; // pointers offset 315 uint32_t dest_length=0; 310 316 dest_length=HEADER->datasize; 311 317 if(dest_length==0) … … 336 342 } 337 343 338 Gamestate* Gamestate::doSelection(unsigned int clientID ){344 Gamestate* Gamestate::doSelection(unsigned int clientID, unsigned int targetSize){ 339 345 assert(data_); 340 std:: map<unsigned int, Synchronisable *>::iterator it;346 std::list<obj>::iterator it; 341 347 342 348 // allocate memory for new data … … 345 351 Gamestate *gs = new Gamestate(gdata); 346 352 uint8_t *newdata = gdata + sizeof(GamestateHeader); 347 uint8_t *origdata = GAMESTATE_START(data_);353 // uint8_t *origdata = GAMESTATE_START(data_); 348 354 349 355 //copy the GamestateHeader … … 351 357 352 358 synchronisableHeader *oldobjectheader, *newobjectheader; 353 unsigned int objectOffset; 354 359 uint32_t objectOffset; 360 unsigned int objectsize, destsize=0; 361 Synchronisable *object; 362 363 //call TrafficControl 364 trafficControl_.processObjectList( clientID, HEADER->id, &dataMap_ ); 365 355 366 //copy in the zeros 356 367 for(it=dataMap_.begin(); it!=dataMap_.end(); it++){ 357 if( it->second->getSize(HEADER->id)==0)368 if((*it).objSize==0) 358 369 continue; 359 oldobjectheader = (synchronisableHeader*) origdata;370 oldobjectheader = (synchronisableHeader*)(data_ + (*it).objDataOffset); 360 371 newobjectheader = (synchronisableHeader*)newdata; 361 unsigned int objectsize = oldobjectheader->size; 362 assert(it->second->objectID==oldobjectheader->objectID); 372 object = Synchronisable::getSynchronisable( (*it).objID ); 373 assert(object->objectID == oldobjectheader->objectID); 374 objectsize = oldobjectheader->size; 363 375 *newobjectheader = *oldobjectheader; 364 376 objectOffset=sizeof(synchronisableHeader); //skip the size and the availableData variables in the objectheader 365 if (it->second->doSelection(HEADER->id)){377 if ( /*object->doSelection(HEADER->id)*/true ){ 366 378 assert(newobjectheader->dataAvailable==true); 367 memcpy(newdata+objectOffset, origdata+objectOffset, objectsize-objectOffset);379 memcpy(newdata+objectOffset, data_ + (*it).objDataOffset + objectOffset, objectsize-objectOffset); 368 380 }else{ 369 381 newobjectheader->dataAvailable=false; … … 372 384 } 373 385 newdata += objectsize; 374 origdata += objectsize; 375 } 386 destsize += objectsize; 387 // origdata += objectsize; 388 } 389 ((GamestateHeader*)gdata)->datasize = destsize; 390 assert(destsize!=0); 376 391 return gs; 377 392 } … … 388 403 389 404 //preparations 390 std:: map<unsigned int, Synchronisable *>::iterator it;405 std::list<obj>::iterator it; 391 406 uint8_t *origdata, *basedata, *destdata, *ndata; 392 u nsigned int objectOffset, streamOffset=0; //data offset393 u nsigned int minsize = (HEADER->datasize < GAMESTATE_HEADER(base->data_)->datasize) ? HEADER->datasize : GAMESTATE_HEADER(base->data_)->datasize;407 uint32_t objectOffset, streamOffset=0; //data offset 408 uint32_t minsize = (HEADER->datasize < GAMESTATE_HEADER(base->data_)->datasize) ? HEADER->datasize : GAMESTATE_HEADER(base->data_)->datasize; 394 409 synchronisableHeader *origheader; 395 410 synchronisableHeader *destheader; 411 Synchronisable *object; 396 412 397 413 origdata = GAMESTATE_START(this->data_); … … 403 419 for(it=dataMap_.begin(); it!=dataMap_.end(); it++){ 404 420 assert(streamOffset<HEADER->datasize); 405 bool sendData = it->second->doSelection(HEADER->id);406 421 origheader = (synchronisableHeader *)(origdata+streamOffset); 407 422 destheader = (synchronisableHeader *)(destdata+streamOffset); 423 object = Synchronisable::getSynchronisable(origheader->objectID); 424 bool sendData = object->doSelection(HEADER->id); 408 425 409 426 //copy and partially diff the object header 410 assert(sizeof(synchronisableHeader)==3*sizeof(u nsigned int)+sizeof(bool));427 assert(sizeof(synchronisableHeader)==3*sizeof(uint32_t)+sizeof(bool)); 411 428 *(uint32_t*)destdata = *(uint32_t*)origdata; //size (do not diff) 412 429 *(bool*)(destdata+sizeof(uint32_t)) = sendData; … … 456 473 457 474 //preparations 458 std:: map<unsigned int, Synchronisable *>::iterator it;475 std::list<obj>::iterator it; 459 476 uint8_t *origdata, *basedata, *destdata, *ndata; 460 u nsigned int objectOffset, streamOffset=0; //data offset461 u nsigned int minsize = (HEADER->datasize < GAMESTATE_HEADER(base->data_)->datasize) ? HEADER->datasize : GAMESTATE_HEADER(base->data_)->datasize;477 uint32_t objectOffset, streamOffset=0; //data offset 478 uint32_t minsize = (HEADER->datasize < GAMESTATE_HEADER(base->data_)->datasize) ? HEADER->datasize : GAMESTATE_HEADER(base->data_)->datasize; 462 479 synchronisableHeader *origheader; 463 480 synchronisableHeader *destheader; 481 Synchronisable *object; 464 482 465 483 origdata = GAMESTATE_START(this->data_); … … 473 491 origheader = (synchronisableHeader *)(origdata+streamOffset); 474 492 destheader = (synchronisableHeader *)(destdata+streamOffset); 493 object = Synchronisable::getSynchronisable( origheader->objectID ); 475 494 bool sendData; 476 495 477 496 //copy and partially diff the object header 478 assert(sizeof(synchronisableHeader)==3*sizeof(u nsigned int)+sizeof(bool));479 *(u nsigned int*)destdata = *(unsigned int*)origdata; //size (do not diff)480 *(bool*)(destdata+sizeof(u nsigned int)) = *(bool*)(origdata+sizeof(unsigned int));481 sendData = *(bool*)(origdata+sizeof(u nsigned int));497 assert(sizeof(synchronisableHeader)==3*sizeof(uint32_t)+sizeof(bool)); 498 *(uint32_t*)destdata = *(uint32_t*)origdata; //size (do not diff) 499 *(bool*)(destdata+sizeof(uint32_t)) = *(bool*)(origdata+sizeof(uint32_t)); 500 sendData = *(bool*)(origdata+sizeof(uint32_t)); 482 501 if(sendData){ 483 *(u nsigned int*)(destdata+sizeof(unsigned int)+sizeof(bool)) = *(unsigned int*)(basedata+sizeof(unsigned int)+sizeof(bool)) ^ *(unsigned int*)(origdata+sizeof(unsigned int)+sizeof(bool)); //objectid (diff it)484 *(u nsigned int*)(destdata+2*sizeof(unsigned int)+sizeof(bool)) = *(unsigned int*)(basedata+2*sizeof(unsigned int)+sizeof(bool)) ^ *(unsigned int*)(origdata+2*sizeof(unsigned int)+sizeof(bool)); //classid (diff it)502 *(uint32_t*)(destdata+sizeof(uint32_t)+sizeof(bool)) = *(uint32_t*)(basedata+sizeof(uint32_t)+sizeof(bool)) ^ *(uint32_t*)(origdata+sizeof(uint32_t)+sizeof(bool)); //objectid (diff it) 503 *(uint32_t*)(destdata+2*sizeof(uint32_t)+sizeof(bool)) = *(uint32_t*)(basedata+2*sizeof(uint32_t)+sizeof(bool)) ^ *(uint32_t*)(origdata+2*sizeof(uint32_t)+sizeof(bool)); //classid (diff it) 485 504 }else{ 486 *(u nsigned int*)(destdata+sizeof(unsigned int)+sizeof(bool)) = 0;487 *(u nsigned int*)(destdata+2*sizeof(unsigned int)+sizeof(bool)) = 0;505 *(uint32_t*)(destdata+sizeof(uint32_t)+sizeof(bool)) = 0; 506 *(uint32_t*)(destdata+2*sizeof(uint32_t)+sizeof(bool)) = 0; 488 507 } 489 508 objectOffset=sizeof(synchronisableHeader); … … 523 542 uint8_t *basep = GAMESTATE_START(base->data_); 524 543 uint8_t *gs = GAMESTATE_START(this->data_); 525 u nsigned int of=0; // pointers offset526 u nsigned int dest_length=0;544 uint32_t of=0; // pointers offset 545 uint32_t dest_length=0; 527 546 dest_length=HEADER->datasize; 528 547 if(dest_length==0) … … 554 573 555 574 556 u nsigned int Gamestate::calcGamestateSize(unsigned int id, uint8_t mode)557 { 558 u nsigned int size=0;575 uint32_t Gamestate::calcGamestateSize(int32_t id, uint8_t mode) 576 { 577 uint32_t size=0; 559 578 // get the start of the Synchronisable list 560 579 ObjectList<Synchronisable>::iterator it; -
code/branches/bugger/src/network/packet/Gamestate.h
r2171 r2531 31 31 #define NETWORK_PACKETGAMESTATE_H 32 32 33 #include " ../NetworkPrereqs.h"33 #include "network/NetworkPrereqs.h" 34 34 35 35 #include "Packet.h" 36 #include "network/Synchronisable.h" 36 #include "network/TrafficControl.h" 37 #include "core/CoreIncludes.h" 37 38 #include <map> 39 #include <list> 38 40 #ifndef NDEBUG 39 41 #include "util/CRC32.h" … … 79 81 Gamestate *undiff(Gamestate *base); 80 82 Gamestate* intelligentUnDiff(Gamestate *base); 81 Gamestate* doSelection(unsigned int clientID );83 Gamestate* doSelection(unsigned int clientID, unsigned int targetSize); 82 84 bool compressData(); 83 85 bool decompressData(); … … 85 87 // Packet functions 86 88 private: 87 virtual u nsigned int getSize() const;89 virtual uint32_t getSize() const; 88 90 virtual bool process(); 89 91 90 92 bool operator ==(packet::Gamestate gs); 91 93 private: 92 u nsigned int calcGamestateSize(unsigned int id, uint8_t mode=0x0);94 uint32_t calcGamestateSize(int32_t id, uint8_t mode=0x0); 93 95 void removeObject(ObjectListIterator<Synchronisable> &it); 94 std::map<unsigned int, Synchronisable*> dataMap_; 96 std::list<obj> dataMap_; 97 static TrafficControl trafficControl_; 95 98 }; 96 99 -
code/branches/bugger/src/network/packet/Welcome.cc
r2171 r2531 32 32 #include "Welcome.h" 33 33 #include "network/Host.h" 34 #include "network/ Synchronisable.h"34 #include "network/synchronisable/Synchronisable.h" 35 35 #include "core/CoreIncludes.h" 36 36 #include <assert.h> … … 43 43 #define _CLIENTID _PACKETID + sizeof(ENUM::Type) 44 44 #define _SHIPID _CLIENTID + sizeof(uint32_t) 45 #define _ENDIANTEST _SHIPID + sizeof(uint32_t) 45 46 46 47 Welcome::Welcome( unsigned int clientID, unsigned int shipID ) … … 52 53 assert(data_); 53 54 *(packet::ENUM::Type *)(data_ + _PACKETID ) = packet::ENUM::Welcome; 54 *(uint32_t *)&data_[ _CLIENTID ] = clientID; 55 *(uint32_t *)&data_[ _SHIPID ] = shipID; 55 *(uint32_t *)(data_ + _CLIENTID ) = clientID; 56 *(uint32_t *)(data_ + _SHIPID ) = shipID; 57 *(uint32_t *)(data_ + _ENDIANTEST ) = 0xFEDC4321; 56 58 } 57 59 … … 70 72 71 73 unsigned int Welcome::getSize() const{ 72 return sizeof(packet::ENUM::Type) + 2*sizeof(uint32_t);74 return sizeof(packet::ENUM::Type) + 3*sizeof(uint32_t); 73 75 } 74 76 … … 77 79 clientID = *(uint32_t *)&data_[ _CLIENTID ]; 78 80 shipID = *(uint32_t *)&data_[ _SHIPID ]; 81 assert(*(uint32_t *)(data_ + _ENDIANTEST ) == 0xFEDC4321); 79 82 Host::setClientID(clientID); 80 83 Host::setShipID(shipID); -
code/branches/bugger/src/network/synchronisable/Synchronisable.cc
r2371 r2531 79 79 80 80 81 #ifndef NDEBUG 82 ObjectList<Synchronisable>::iterator it; 83 for(it = ObjectList<Synchronisable>::begin(); it!=ObjectList<Synchronisable>::end(); ++it){ 84 if( it->getObjectID()==this->objectID ) 85 assert(*it==this || (it->objectID==OBJECTID_UNKNOWN && it->objectMode_==0x0)); 86 } 87 #endif 81 //#ifndef NDEBUG 82 // ObjectList<Synchronisable>::iterator it; 83 // for(it = ObjectList<Synchronisable>::begin(); it!=ObjectList<Synchronisable>::end(); ++it){ 84 // if(!(*it==this || (it->objectID==OBJECTID_UNKNOWN && it->objectMode_==0x0))) 85 // { 86 // COUT(1) << "Assertion failed: *it==this || (it->objectID==OBJECTID_UNKNOWN && it->objectMode_==0x0)" << std::endl; 87 // COUT(1) << "Possible reason for this error: Client created a synchronized object without the Server's approval." << std::endl; 88 // abort(); 89 // } 90 // } 91 //#endif 88 92 89 93 this->creatorID = OBJECTID_UNKNOWN; … … 159 163 160 164 Identifier* id = ClassByID(header->classID); 165 if (!id) 166 { 167 COUT(1) << "Assertion failed: id" << std::endl; 168 COUT(1) << "Possible reason for this error: Client received a synchronizable object whose class has no factory." << std::endl; 169 abort(); 170 } 161 171 assert(id); 162 172 BaseObject* creator = 0; -
code/branches/bugger/src/network/synchronisable/Synchronisable.h
r2371 r2531 90 90 static uint32_t popDeletedObject(){ uint32_t i = deletedObjects_.front(); deletedObjects_.pop(); return i; } 91 91 92 inline uint32_t getObjectID() {return objectID;}93 inline unsigned int getCreatorID() {return creatorID;}94 inline uint32_t getClassID() {return classID;}95 inline unsigned int getPriority() { return objectFrequency_;}92 inline uint32_t getObjectID() const {return objectID;} 93 inline unsigned int getCreatorID() const {return creatorID;} 94 inline uint32_t getClassID() const {return classID;} 95 inline unsigned int getPriority() const { return objectFrequency_;} 96 96 97 97 protected:
Note: See TracChangeset
for help on using the changeset viewer.