Changeset 5935 for code/branches/pickup/src/libraries/network
- Timestamp:
- Oct 13, 2009, 5:05:17 PM (15 years ago)
- Location:
- code/branches/pickup
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/pickup
- Property svn:mergeinfo changed
-
code/branches/pickup/src/libraries/network/Client.cc
r5781 r5935 43 43 #include <cassert> 44 44 45 #include "util/Clock.h" 45 46 #include "util/Debug.h" 46 #include "core/Clock.h"47 47 #include "synchronisable/Synchronisable.h" 48 48 #include "packet/Chat.h" 49 49 #include "packet/Gamestate.h" 50 50 #include "FunctionCallManager.h" 51 #include "core/CoreIncludes.h" 52 #include "core/Game.h" 51 53 52 54 namespace orxonox … … 158 160 return; 159 161 } 162 163 void Client::connectionClosed() 164 { 165 ObjectList<Synchronisable>::iterator it; 166 for(it = ObjectList<Synchronisable>::begin(); it; ) 167 { 168 if( it->getSyncMode() != 0x0 ) 169 (it++)->destroy(); 170 else 171 { 172 ++it; 173 } 174 } 175 Game::getInstance().popState(); 176 Game::getInstance().popState(); 177 } 160 178 161 179 } -
code/branches/pickup/src/libraries/network/Client.h
r5781 r5935 45 45 46 46 #include <string> 47 48 #include "util/UtilPrereqs.h" 47 49 #include "ClientConnection.h" 48 50 #include "GamestateClient.h" … … 72 74 73 75 void update(const Clock& time); 74 76 protected: 77 virtual void connectionClosed(); 75 78 private: 76 79 Client(const Client& copy); // not used -
code/branches/pickup/src/libraries/network/ClientConnection.cc
r5781 r5935 118 118 case ENET_EVENT_TYPE_DISCONNECT: 119 119 COUT(4) << "received disconnect confirmation from server" << endl; 120 this->connectionClosed(); 120 121 return true; 121 122 } … … 123 124 } 124 125 enet_peer_reset( this->server_ ); 126 this->connectionClosed(); 125 127 return false; 126 128 } … … 133 135 } 134 136 135 void ClientConnection::add Client(ENetEvent* event)137 void ClientConnection::addPeer(ENetEvent* event) 136 138 { 137 139 assert(0); 138 140 } 139 void ClientConnection:: disconnectPeer(ENetEvent* event)141 void ClientConnection::removePeer(ENetEvent* event) 140 142 { 141 143 this->established_=false; 142 144 COUT(1) << "Received disconnect Packet from Server!" << endl; 143 145 // server closed the connection 146 this->connectionClosed(); 144 147 } 145 148 -
code/branches/pickup/src/libraries/network/ClientConnection.h
r5781 r5935 53 53 bool addPacket(ENetPacket *packet); 54 54 inline bool isConnected(){ return this->established_; } 55 protected: 56 virtual void connectionClosed()=0; 55 57 private: 56 virtual void add Client(ENetEvent* event);57 virtual void disconnectPeer(ENetEvent* event);58 virtual void addPeer(ENetEvent* event); 59 virtual void removePeer(ENetEvent* event); 58 60 59 61 bool disconnectConnection(); -
code/branches/pickup/src/libraries/network/ClientConnectionListener.cc
r5781 r5935 33 33 #include "ClientInformation.h" 34 34 35 namespace orxonox{ 35 namespace orxonox 36 { 37 ClientConnectionListener::ClientConnectionListener() 38 { 39 RegisterRootObject(ClientConnectionListener); 40 } 36 41 37 ClientConnectionListener::ClientConnectionListener() 38 { 39 RegisterRootObject(ClientConnectionListener); 40 } 42 void ClientConnectionListener::broadcastClientConnected(unsigned int clientID) 43 { 44 for (ObjectList<ClientConnectionListener>::iterator it = ObjectList<ClientConnectionListener>::begin(); it != ObjectList<ClientConnectionListener>::end(); ++it) 45 it->clientConnected(clientID); 46 } 47 48 void ClientConnectionListener::broadcastClientDisconnected(unsigned int clientID) 49 { 50 for (ObjectList<ClientConnectionListener>::iterator it = ObjectList<ClientConnectionListener>::begin(); it != ObjectList<ClientConnectionListener>::end(); ++it) 51 it->clientDisconnected(clientID); 52 } 41 53 42 void ClientConnectionListener::getConnectedClients(){ 43 if(GameMode::showsGraphics()) 44 this->clientConnected(0); //server client id 45 ClientInformation *client = ClientInformation::getBegin(); 46 while(client){ 47 this->clientConnected(client->getID()); 48 client=client->next(); 54 void ClientConnectionListener::getConnectedClients() 55 { 56 ClientInformation* client = ClientInformation::getBegin(); 57 while (client) 58 { 59 this->clientConnected(client->getID()); 60 client = client->next(); 61 } 49 62 } 50 }51 52 63 } 53 64 -
code/branches/pickup/src/libraries/network/ClientConnectionListener.h
r5781 r5935 33 33 #include "core/OrxonoxClass.h" 34 34 35 namespace orxonox{ 35 namespace orxonox 36 { 37 class _NetworkExport ClientConnectionListener : virtual public OrxonoxClass 38 { 39 public: 40 ClientConnectionListener(); 41 virtual ~ClientConnectionListener() {} 42 43 static void broadcastClientConnected(unsigned int clientID); 44 static void broadcastClientDisconnected(unsigned int clientID); 36 45 37 class _NetworkExport ClientConnectionListener : virtual public OrxonoxClass 38 { 39 friend class Server; 46 virtual void clientConnected(unsigned int clientID) = 0; 47 virtual void clientDisconnected(unsigned int clientID) = 0; 40 48 41 public: 42 ClientConnectionListener(); 43 virtual ~ClientConnectionListener() {} 44 45 void getConnectedClients(); 46 47 protected: 48 virtual void clientConnected(unsigned int clientID) = 0; 49 virtual void clientDisconnected(unsigned int clientID) = 0; 50 }; 51 49 protected: 50 void getConnectedClients(); 51 }; 52 52 } 53 53 -
code/branches/pickup/src/libraries/network/Connection.cc
- Property svn:eol-style set to native
r5781 r5935 83 83 // log handling ================ 84 84 case ENET_EVENT_TYPE_CONNECT: 85 add Client( &event );85 addPeer( &event ); 86 86 break; 87 87 case ENET_EVENT_TYPE_DISCONNECT: 88 disconnectPeer( &event );88 removePeer( &event ); 89 89 break; 90 90 case ENET_EVENT_TYPE_RECEIVE: -
code/branches/pickup/src/libraries/network/Connection.h
- Property svn:eol-style set to native
r5781 r5935 64 64 65 65 int service(ENetEvent* event); 66 v oid disconnectPeer(ENetPeer *peer);66 virtual void disconnectPeer(ENetPeer *peer); 67 67 68 68 void processQueue(); 69 virtual void add Client(ENetEvent* event)=0;70 virtual void disconnectPeer(ENetEvent* event)=0;69 virtual void addPeer(ENetEvent* event)=0; 70 virtual void removePeer(ENetEvent* event)=0; 71 71 virtual bool processPacket(ENetEvent* event); 72 72 -
code/branches/pickup/src/libraries/network/GamestateClient.cc
r5781 r5935 108 108 ObjectList<Synchronisable>::iterator temp=it; 109 109 ++it; 110 delete *temp;110 temp->destroy(); // or delete? 111 111 } 112 112 -
code/branches/pickup/src/libraries/network/GamestateManager.cc
r5781 r5935 77 77 delete (*it2).second; 78 78 } 79 delete this->trafficControl_;79 this->trafficControl_->destroy(); 80 80 // delete this->threadMutex_; 81 81 // delete this->threadPool_; … … 160 160 finishGamestate( cid, &clientGamestates.back(), client, reference ); 161 161 //FunctorMember<GamestateManager>* functor = 162 // ExecutorMember<GamestateManager>* executor = createExecutor( createFunctor(&GamestateManager::finishGamestate) ); 163 // executor->setObject(this); 162 // ExecutorMember<GamestateManager>* executor = createExecutor( createFunctor(&GamestateManager::finishGamestate, this) ); 164 163 // executor->setDefaultValues( cid, &clientGamestates.back(), client, reference ); 165 164 // (*static_cast<Executor*>(executor))(); -
code/branches/pickup/src/libraries/network/NetworkFunction.cc
r5781 r5935 60 60 std::map<std::string, NetworkFunctionBase*>::iterator it; 61 61 for( it=NetworkFunctionBase::nameMap_.begin(); it!=NetworkFunctionBase::nameMap_.end(); ++it ) 62 delete it->second;62 it->second->destroy(); 63 63 } 64 64 -
code/branches/pickup/src/libraries/network/NetworkPrereqs.h
r5781 r5935 28 28 29 29 /** 30 @file 31 @brief Contains all the necessary forward declarations for all classes and structs. 30 @file 31 @brief 32 Shared library macros, enums, constants and forward declarations for the network library 32 33 */ 33 34 … … 40 41 // Shared library settings 41 42 //----------------------------------------------------------------------- 43 42 44 #if defined(ORXONOX_PLATFORM_WINDOWS) && !defined( NETWORK_STATIC_BUILD ) 43 45 # ifdef NETWORK_SHARED_BUILD … … 57 59 58 60 //----------------------------------------------------------------------- 59 // Library global contants61 // Constants 60 62 //----------------------------------------------------------------------- 63 61 64 namespace orxonox 62 65 { 63 66 static const unsigned int GAMESTATEID_INITIAL = static_cast<unsigned int>(-1); 64 67 static const unsigned int CLIENTID_UNKNOWN = static_cast<unsigned int>(-2); 65 static const uint32_t OBJECTID_UNKNOWN = static_cast<uint32_t>(-1); 68 } 69 70 //----------------------------------------------------------------------- 71 // Enums 72 //----------------------------------------------------------------------- 73 74 namespace orxonox 75 { 76 namespace packet 77 { 78 namespace PacketFlag 79 { 80 enum Value 81 { 82 Reliable = 1, 83 Unsequence = 2, 84 NoAllocate = 4 85 }; 86 } 87 } 66 88 } 67 89 … … 84 106 namespace orxonox 85 107 { 108 class ChatListener; 86 109 class Client; 87 110 class ClientConnection; 88 111 class ClientConnectionListener; 89 class ClientFrameListener;90 112 class ClientInformation; 91 113 class Connection; 92 114 class FunctionCallManager; 93 115 class GamestateClient; 116 class GamestateHandler; 94 117 class GamestateManager; 95 class GamestateHandler; 96 class NetworkCallbackBase; 97 template <class T> class NetworkCallback; 98 class NetworkCallbackManager; 118 class Host; 99 119 class NetworkFunctionBase; 120 struct NetworkFunctionPointer; 100 121 class NetworkFunctionStatic; 122 template <class T> 123 class NetworkMemberFunction; 101 124 class NetworkMemberFunctionBase; 102 template <class T> class NetworkMemeberFunction;103 struct NetworkFunctionPointer;104 125 class Server; 105 126 class ServerConnection; 106 class ServerFrameListener;107 class Synchronisable;108 class SynchronisableVariableBase;109 template <class T> class SynchronisableVariable;110 template <class T> class SynchronisableVariableBidirectional;111 struct ClientList;112 struct PacketEnvelope;113 struct QueueItem;114 struct syncData;115 127 class TrafficControl; 116 class obj;117 class objInfo;118 128 129 // packet 119 130 namespace packet 120 131 { … … 122 133 class Chat; 123 134 class ClassID; 135 class DeleteObjects; 124 136 class FunctionCalls; 125 137 class FunctionIDs; 126 138 class Gamestate; 127 class NetworkIDs;128 139 class Packet; 129 140 class Welcome; 141 } 130 142 131 namespace PacketFlag 132 { 133 enum Value 134 { 135 Reliable = 1, 136 Unsequence = 2, 137 NoAllocate = 4 138 }; 139 } 140 } 143 // synchronisable 144 template <class T> 145 class NetworkCallback; 146 class NetworkCallbackBase; 147 class NetworkCallbackManager; 148 class Synchronisable; 149 class SynchronisableHeader; 150 template <class T> 151 class SynchronisableVariable; 152 class SynchronisableVariableBase; 153 template <class T> 154 class SynchronisableVariableBidirectional; 141 155 } 142 156 -
code/branches/pickup/src/libraries/network/Server.cc
r5781 r5935 46 46 #include <string> 47 47 48 #include "util/Clock.h" 48 49 #include "util/Debug.h" 49 #include "core/Clock.h"50 50 #include "core/ObjectList.h" 51 51 #include "core/Executor.h" … … 245 245 packet::DeleteObjects *del = new packet::DeleteObjects(); 246 246 if(!del->fetchIDs()) 247 { 248 delete del; 247 249 return true; //everything ok (no deletes this tick) 250 } 248 251 // COUT(3) << "sending DeleteObjects" << std::endl; 249 252 while(temp != NULL){ … … 267 270 268 271 269 void Server::add Client(ENetEvent *event){272 void Server::addPeer(ENetEvent *event){ 270 273 static unsigned int newid=1; 271 274 … … 279 282 280 283 // inform all the listeners 281 ObjectList<ClientConnectionListener>::iterator listener = ObjectList<ClientConnectionListener>::begin(); 282 while(listener){ 283 listener->clientConnected(newid); 284 listener++; 285 } 284 ClientConnectionListener::broadcastClientConnected(newid); 286 285 287 286 ++newid; … … 290 289 createClient(temp->getID()); 291 290 } 291 292 void Server::removePeer(ENetEvent *event) 293 { 294 COUT(4) << "removing client from list" << std::endl; 295 ClientInformation *client = ClientInformation::findClient(&event->peer->address); 296 if(!client) 297 return; 298 else 299 { 300 //ServerConnection::disconnectClient( client ); 301 ClientConnectionListener::broadcastClientDisconnected( client->getID() ); 302 delete client; 303 } 304 } 292 305 293 306 bool Server::createClient(int clientID){ … … 329 342 ServerConnection::disconnectClient( client ); 330 343 GamestateManager::removeClient(client); 331 // inform all the listeners 332 ObjectList<ClientConnectionListener>::iterator listener = ObjectList<ClientConnectionListener>::begin(); 333 while(listener){ 334 listener->clientDisconnected(client->getID()); 335 ++listener; 336 } 337 delete client; //remove client from list 344 // inform all the listeners 345 ClientConnectionListener::broadcastClientDisconnected(client->getID()); 338 346 } 339 347 -
code/branches/pickup/src/libraries/network/Server.h
r5781 r5935 32 32 #include "NetworkPrereqs.h" 33 33 34 #include "util/UtilPrereqs.h" 34 35 #include "core/CorePrereqs.h" 35 36 #include "Host.h" … … 65 66 unsigned int playerID(){return 0;} 66 67 67 void addClient(ENetEvent *event); 68 void addPeer(ENetEvent *event); 69 void removePeer(ENetEvent *event); 70 68 71 bool createClient(int clientID); 69 72 void disconnectClient( ClientInformation *client); -
code/branches/pickup/src/libraries/network/ServerConnection.cc
r5781 r5935 103 103 { 104 104 Connection::disconnectPeer( client->getPeer() ); 105 delete client;106 }107 108 void ServerConnection::disconnectPeer( ENetEvent* event )109 {110 COUT(4) << "removing client from list" << std::endl;111 ClientInformation *client = ClientInformation::findClient(&event->peer->address);112 if(!client)113 return;114 else115 ServerConnection::disconnectClient( client );116 105 } 117 106 … … 119 108 ClientInformation *client = ClientInformation::findClient(clientID); 120 109 if(client) 121 disconnectClient(client);110 ServerConnection::disconnectClient(client); 122 111 } 123 112 … … 126 115 ClientInformation *temp = ClientInformation::getBegin(); 127 116 while(temp!=0){ 128 disconnectClient( temp );117 ServerConnection::disconnectClient( temp ); 129 118 temp = temp->next(); 130 119 } … … 141 130 break; 142 131 case ENET_EVENT_TYPE_DISCONNECT: 143 if(ClientInformation::findClient(&(event.peer->address))) 144 delete ClientInformation::findClient(&(event.peer->address)); 132 removePeer( &event ); 145 133 temp = ClientInformation::getBegin(); 146 134 break; -
code/branches/pickup/src/libraries/network/ServerConnection.h
- Property svn:eol-style set to native
r5781 r5935 59 59 static bool addPacketAll(ENetPacket *packet); 60 60 virtual void disconnectClient(ClientInformation *client); 61 void disconnectPeer( ENetEvent* event );62 61 void disconnectClient(int clientID); 63 62 protected: -
code/branches/pickup/src/libraries/network/packet/CMakeLists.txt
r5781 r5935 1 1 ADD_SOURCE_FILES(NETWORK_SRC_FILES 2 COMPILATION_BEGIN PacketCompilation.cc 2 3 Acknowledgement.cc 3 4 Chat.cc … … 9 10 Packet.cc 10 11 Welcome.cc 12 COMPILATION_END 11 13 ) 12 14 -
code/branches/pickup/src/libraries/network/packet/ClassID.cc
r5781 r5935 49 49 Identifier *id; 50 50 std::string classname; 51 unsigned int nrOfClasses=0; 51 unsigned int nrOfClasses=0; 52 52 unsigned int packetSize=2*sizeof(uint32_t); //space for the packetID and for the nrofclasses 53 53 uint32_t network_id; 54 54 flags_ = flags_ | PACKET_FLAGS_CLASSID; 55 55 std::queue<std::pair<uint32_t, std::string> > tempQueue; 56 56 57 57 //calculate total needed size (for all strings and integers) 58 std::map<std::string, Identifier*>::const_iterator it = Factory::getFactoryMapBegin();59 for(;it != Factory::getFactoryMapEnd();++it){58 std::map<std::string, Identifier*>::const_iterator it = Identifier::getStringIdentifierMapBegin(); 59 for(;it != Identifier::getStringIdentifierMapEnd();++it){ 60 60 id = (*it).second; 61 if(id == NULL )61 if(id == NULL || !id->hasFactory()) 62 62 continue; 63 63 classname = id->getName(); 64 64 network_id = id->getNetworkID(); 65 if(network_id==0)66 COUT(3) << "we got a null class id: " << id->getName() << std::endl;67 65 // now push the network id and the classname to the stack 68 66 tempQueue.push( std::pair<unsigned int, std::string>(network_id, classname) ); … … 70 68 packetSize += (classname.size()+1)+sizeof(uint32_t)+sizeof(uint32_t); 71 69 } 72 70 73 71 this->data_=new uint8_t[ packetSize ]; 74 72 //set the appropriate packet id 75 73 assert(this->data_); 76 74 *(Type::Value *)(this->data_ + _PACKETID ) = Type::ClassID; 77 75 78 76 uint8_t *temp=data_+sizeof(uint32_t); 79 77 // save the number of all classes 80 78 *(uint32_t*)temp = nrOfClasses; 81 79 temp += sizeof(uint32_t); 82 80 83 81 // now save all classids and classnames 84 82 std::pair<uint32_t, std::string> tempPair; … … 91 89 temp+=2*sizeof(uint32_t)+tempPair.second.size()+1; 92 90 } 93 91 94 92 COUT(5) << "classid packetSize is " << packetSize << endl; 95 93 96 94 } 97 95 … … 111 109 temp += sizeof(uint32_t); 112 110 totalsize += sizeof(uint32_t); // storage size for nr of all classes 113 111 114 112 for(unsigned int i=0; i<nrOfClasses; i++){ 115 113 totalsize += 2*sizeof(uint32_t) + *(uint32_t*)(temp + sizeof(uint32_t)); … … 125 123 uint32_t stringsize; 126 124 unsigned char *classname; 127 128 129 //clea nthe map of network ids130 Factory::cleanNetworkIDs();131 125 126 127 //clear the map of network ids 128 Identifier::clearNetworkIDs(); 129 132 130 COUT(4) << "=== processing classids: " << endl; 133 131 std::pair<uint32_t, std::string> tempPair; … … 136 134 nrOfClasses = *(uint32_t*)temp; 137 135 temp += sizeof(uint32_t); 138 136 139 137 for( int i=0; i<nrOfClasses; i++){ 140 138 networkID = *(uint32_t*)temp; -
code/branches/pickup/src/libraries/network/packet/Gamestate.cc
r5781 r5935 378 378 rawDiff( dest2, dest, basep, header_->getDataSize(), base->header_->getDataSize() ); 379 379 assert( memcmp( dest2, gs, dest_length) == 0 ); 380 delete dest2; 380 381 #endif 381 382 -
code/branches/pickup/src/libraries/network/synchronisable/Synchronisable.cc
r5781 r5935 47 47 /** 48 48 * Constructor: 49 * Initializes all Variables and sets the right objectID 49 * Initializes all Variables and sets the right objectID_ 50 50 */ 51 Synchronisable::Synchronisable(BaseObject* creator ){51 Synchronisable::Synchronisable(BaseObject* creator ){ 52 52 RegisterRootObject(Synchronisable); 53 53 static uint32_t idCounter=0; … … 55 55 if ( GameMode::isMaster() || ( Host::running() && Host::isServer() ) ) 56 56 { 57 this->objectID = idCounter++; //this is only needed when running a server 58 //add synchronisable to the objectMap 59 objectMap_[this->objectID] = this; 57 this->setObjectID( idCounter++ ); 60 58 } 61 59 else 62 60 { 63 objectID=OBJECTID_UNKNOWN; 64 this->setObjectMode(0x0); //make sure this object doesn't get synchronized 65 } 66 classID = static_cast<uint32_t>(-1); 61 objectID_=OBJECTID_UNKNOWN; 62 } 63 classID_ = static_cast<uint32_t>(-1); 67 64 68 65 // set dataSize to 0 … … 72 69 73 70 // get creator id 74 this->creatorID = OBJECTID_UNKNOWN; 75 76 searchcreatorID: 71 if( creator ) 72 this->creatorID_ = creator->getSceneID(); 73 else 74 this->creatorID_ = OBJECTID_UNKNOWN; 75 76 /*searchcreatorID: 77 77 if (creator) 78 78 { … … 80 80 if (synchronisable_creator && synchronisable_creator->objectMode_) 81 81 { 82 this->creatorID = synchronisable_creator->get ObjectID();82 this->creatorID = synchronisable_creator->getScene()->getObjectID(); 83 83 } 84 84 else if (creator != creator->getCreator()) … … 87 87 goto searchcreatorID; 88 88 } 89 } 89 }*/ 90 90 } 91 91 92 92 /** 93 93 * Destructor: 94 * Delete all callback objects and remove objectID from the objectMap_94 * Delete all callback objects and remove objectID_ from the objectMap_ 95 95 */ 96 96 Synchronisable::~Synchronisable(){ … … 99 99 // remove object from the static objectMap 100 100 if (this->objectMode_ != 0x0 && (Host::running() && Host::isServer())) 101 deletedObjects_.push(objectID );101 deletedObjects_.push(objectID_); 102 102 } 103 103 // delete all Synchronisable Variables from syncList ( which are also in stringList ) … … 107 107 stringList.clear(); 108 108 std::map<uint32_t, Synchronisable*>::iterator it; 109 it = objectMap_.find(objectID );109 it = objectMap_.find(objectID_); 110 110 if (it != objectMap_.end()) 111 111 objectMap_.erase(it); … … 172 172 Synchronisable *no = orxonox_cast<Synchronisable*>(bo); 173 173 assert(no); 174 no->objectID=header.getObjectID(); 175 no->creatorID=header.getCreatorID(); //TODO: remove this 176 no->classID=header.getClassID(); 177 COUT(4) << "fabricate objectID: " << no->objectID << " classID: " << no->classID << std::endl; 174 assert( Synchronisable::objectMap_.find(header.getObjectID()) == Synchronisable::objectMap_.end() ); 175 no->setObjectID(header.getObjectID()); 176 //no->creatorID=header.getCreatorID(); //TODO: remove this 177 no->setClassID(header.getClassID()); 178 assert(no->creatorID_ == header.getCreatorID()); 179 //assert(no->classID_ == header.getClassID()); 180 COUT(4) << "fabricate objectID_: " << no->objectID_ << " classID_: " << no->classID_ << std::endl; 178 181 // update data and create object/entity... 179 assert( Synchronisable::objectMap_.find(header.getObjectID()) == Synchronisable::objectMap_.end() );180 Synchronisable::objectMap_[header.getObjectID()] = no;181 182 bool b = no->updateData(mem, mode, true); 182 183 assert(b); … … 191 192 192 193 /** 193 * Finds and deletes the Synchronisable with the appropriate objectID 194 * @param objectID objectIDof the Synchronisable194 * Finds and deletes the Synchronisable with the appropriate objectID_ 195 * @param objectID_ objectID_ of the Synchronisable 195 196 * @return true/false 196 197 */ 197 bool Synchronisable::deleteObject(uint32_t objectID ){198 if(!getSynchronisable(objectID ))198 bool Synchronisable::deleteObject(uint32_t objectID_){ 199 if(!getSynchronisable(objectID_)) 199 200 return false; 200 assert(getSynchronisable(objectID )->objectID==objectID);201 Synchronisable *s = getSynchronisable(objectID );201 assert(getSynchronisable(objectID_)->objectID_==objectID_); 202 Synchronisable *s = getSynchronisable(objectID_); 202 203 if(s) 203 delete s;204 s->destroy(); // or delete? 204 205 else 205 206 return false; … … 208 209 209 210 /** 210 * This function looks up the objectID in the objectMap_ and returns a pointer to the right Synchronisable211 * @param objectID objectIDof the Synchronisable212 * @return pointer to the Synchronisable with the objectID 213 */ 214 Synchronisable* Synchronisable::getSynchronisable(uint32_t objectID ){211 * This function looks up the objectID_ in the objectMap_ and returns a pointer to the right Synchronisable 212 * @param objectID_ objectID_ of the Synchronisable 213 * @return pointer to the Synchronisable with the objectID_ 214 */ 215 Synchronisable* Synchronisable::getSynchronisable(uint32_t objectID_){ 215 216 std::map<uint32_t, Synchronisable*>::iterator it1; 216 it1 = objectMap_.find(objectID );217 it1 = objectMap_.find(objectID_); 217 218 if (it1 != objectMap_.end()) 218 219 return it1->second; … … 220 221 // ObjectList<Synchronisable>::iterator it; 221 222 // for(it = ObjectList<Synchronisable>::begin(); it; ++it){ 222 // if( it->getObjectID()==objectID ){223 // objectMap_[objectID ] = *it;223 // if( it->getObjectID()==objectID_ ){ 224 // objectMap_[objectID_] = *it; 224 225 // return *it; 225 226 // } … … 231 232 232 233 /** 233 * This function takes all SynchronisableVariables out of the Synchronisable and saves them together with the size, objectID and classIDto the given memory234 * This function takes all SynchronisableVariables out of the Synchronisable and saves them together with the size, objectID_ and classID_ to the given memory 234 235 * takes a pointer to already allocated memory (must have at least getSize bytes length) 235 236 * structure of the bitstream: 236 * |totalsize,objectID ,classID,var1,var2,string1_length,string1,var3,...|237 * |totalsize,objectID_,classID_,var1,var2,string1_length,string1,var3,...| 237 238 * length of varx: size saved int syncvarlist 238 239 * @param mem pointer to allocated memory with enough size … … 252 253 uint32_t tempsize = 0; 253 254 #ifndef NDEBUG 254 if (this->classID ==0)255 if (this->classID_==0) 255 256 COUT(3) << "classid 0 " << this->getIdentifier()->getName() << std::endl; 256 257 #endif 257 258 258 if (this->classID == static_cast<uint32_t>(-1)) 259 this->classID = this->getIdentifier()->getNetworkID(); 260 261 assert(ClassByID(this->classID)); 262 assert(this->classID==this->getIdentifier()->getNetworkID()); 259 if (this->classID_ == static_cast<uint32_t>(-1)) 260 this->classID_ = this->getIdentifier()->getNetworkID(); 261 262 assert(ClassByID(this->classID_)); 263 assert(this->classID_==this->getIdentifier()->getNetworkID()); 264 assert(this->objectID_!=OBJECTID_UNKNOWN); 263 265 std::vector<SynchronisableVariableBase*>::iterator i; 264 266 … … 269 271 270 272 271 COUT(5) << "Synchronisable getting data from objectID : " << objectID << " classID: " << classID<< std::endl;273 COUT(5) << "Synchronisable getting data from objectID_: " << objectID_ << " classID_: " << classID_ << std::endl; 272 274 // copy to location 273 275 for(i=syncList.begin(); i!=syncList.end(); ++i){ … … 277 279 278 280 tempsize += SynchronisableHeader::getSize(); 279 header.setObjectID( this->objectID );280 header.setCreatorID( this->creatorID );281 header.setClassID( this->classID );281 header.setObjectID( this->objectID_ ); 282 header.setCreatorID( this->creatorID_ ); 283 header.setClassID( this->classID_ ); 282 284 header.setDataAvailable( true ); 283 285 header.setDataSize( tempsize ); … … 311 313 // start extract header 312 314 SynchronisableHeader syncHeader(mem); 313 assert(syncHeader.getObjectID()==this->objectID );314 assert(syncHeader.getCreatorID()==this->creatorID );315 assert(syncHeader.getClassID()==this->classID );315 assert(syncHeader.getObjectID()==this->objectID_); 316 assert(syncHeader.getCreatorID()==this->creatorID_); 317 assert(syncHeader.getClassID()==this->classID_); 316 318 if(syncHeader.isDataAvailable()==false){ 317 319 mem += syncHeader.getDataSize(); … … 322 324 // stop extract header 323 325 324 //COUT(5) << "Synchronisable: objectID " << syncHeader.getObjectID() << ", classID" << syncHeader.getClassID() << " size: " << syncHeader.getDataSize() << " synchronising data" << std::endl;326 //COUT(5) << "Synchronisable: objectID_ " << syncHeader.getObjectID() << ", classID_ " << syncHeader.getClassID() << " size: " << syncHeader.getDataSize() << " synchronising data" << std::endl; 325 327 for(i=syncList.begin(); i!=syncList.end(); i++) 326 328 { … … 361 363 if(mode==0x0) 362 364 mode=state_; 363 return ( ( objectMode_&mode)!=0 && (!syncList.empty() ) );364 } 365 366 /** 367 * This function looks at the header located in the bytestream and checks wheter objectID and classIDmatch with the Synchronisables ones365 return ( (this->objectMode_ & mode)!=0 && (!syncList.empty() ) ); 366 } 367 368 /** 369 * This function looks at the header located in the bytestream and checks wheter objectID_ and classID_ match with the Synchronisables ones 368 370 * @param mem pointer to the bytestream 369 371 */ … … 371 373 { 372 374 SynchronisableHeader header(mem); 373 assert(header.getObjectID()==this->objectID );375 assert(header.getObjectID()==this->objectID_); 374 376 return header.isDataAvailable(); 375 377 } … … 383 385 * @param mode same as in registerVar 384 386 */ 385 void Synchronisable::set ObjectMode(uint8_t mode){387 void Synchronisable::setSyncMode(uint8_t mode){ 386 388 assert(mode==0x0 || mode==0x1 || mode==0x2 || mode==0x3); 387 objectMode_=mode;389 this->objectMode_=mode; 388 390 } 389 391 -
code/branches/pickup/src/libraries/network/synchronisable/Synchronisable.h
r5781 r5935 68 68 * @brief: stores information about a Synchronisable 69 69 * 70 * This class stores the information about a Synchronisable (objectID , classID, creatorID, dataSize)70 * This class stores the information about a Synchronisable (objectID_, classID_, creatorID_, dataSize) 71 71 * in an emulated bitset. 72 72 * Bit 1 to 31 store the size of the Data the synchronisable consumes in the stream 73 73 * Bit 32 is a bool and defines whether the data is actually stored or is just filled up with 0 74 * Byte 5 to 8: objectID 75 * Byte 9 to 12: classID 76 * Byte 13 to 16: creatorID 74 * Byte 5 to 8: objectID_ 75 * Byte 9 to 12: classID_ 76 * Byte 13 to 16: creatorID_ 77 77 */ 78 78 class _NetworkExport SynchronisableHeader{ … … 94 94 inline uint32_t getObjectID() const 95 95 { return *(uint32_t*)(data_+4); } 96 inline void setObjectID(uint32_t objectID )97 { *(uint32_t*)(data_+4) = objectID ; }96 inline void setObjectID(uint32_t objectID_) 97 { *(uint32_t*)(data_+4) = objectID_; } 98 98 inline uint32_t getClassID() const 99 99 { return *(uint32_t*)(data_+8); } 100 inline void setClassID(uint32_t classID )101 { *(uint32_t*)(data_+8) = classID ; }100 inline void setClassID(uint32_t classID_) 101 { *(uint32_t*)(data_+8) = classID_; } 102 102 inline uint32_t getCreatorID() const 103 103 { return *(uint32_t*)(data_+12); } 104 inline void setCreatorID(uint32_t creatorID )105 { *(uint32_t*)(data_+12) = creatorID ; }104 inline void setCreatorID(uint32_t creatorID_) 105 { *(uint32_t*)(data_+12) = creatorID_; } 106 106 inline void operator=(SynchronisableHeader& h) 107 107 { memcpy(data_, h.data_, getSize()); } … … 122 122 123 123 static Synchronisable *fabricate(uint8_t*& mem, uint8_t mode=0x0); 124 static bool deleteObject(uint32_t objectID );125 static Synchronisable *getSynchronisable(uint32_t objectID );124 static bool deleteObject(uint32_t objectID_); 125 static Synchronisable *getSynchronisable(uint32_t objectID_); 126 126 static unsigned int getNumberOfDeletedObject(){ return deletedObjects_.size(); } 127 127 static uint32_t popDeletedObject(){ uint32_t i = deletedObjects_.front(); deletedObjects_.pop(); return i; } 128 128 129 inline uint32_t getObjectID() const {return objectID;} 130 inline unsigned int getCreatorID() const {return creatorID;} 131 inline uint32_t getClassID() const {return classID;} 132 inline unsigned int getPriority() const { return objectFrequency_;} 129 inline uint32_t getObjectID() const {return this->objectID_;} 130 inline unsigned int getCreatorID() const {return this->creatorID_;} 131 inline uint32_t getClassID() const {return this->classID_;} 132 inline unsigned int getPriority() const { return this->objectFrequency_;} 133 inline uint8_t getSyncMode() const { return this->objectMode_; } 134 135 void setSyncMode(uint8_t mode); 133 136 134 137 protected: … … 136 139 template <class T> void registerVariable(T& variable, uint8_t mode=0x1, NetworkCallbackBase *cb=0, bool bidirectional=false); 137 140 //template <class T> void unregisterVariable(T& var); 138 void setObjectMode(uint8_t mode);139 141 void setPriority(unsigned int freq){ objectFrequency_ = freq; } 140 142 … … 146 148 bool isMyData(uint8_t* mem); 147 149 bool doSync(int32_t id, uint8_t mode=0x0); 148 149 uint32_t objectID; 150 uint32_t creatorID; 151 uint32_t classID; 150 151 inline void setObjectID(uint32_t id){ this->objectID_ = id; objectMap_[this->objectID_] = this; } 152 inline void setClassID(uint32_t id){ this->classID_ = id; } 153 154 uint32_t objectID_; 155 uint32_t creatorID_; 156 uint32_t classID_; 152 157 153 158 std::vector<SynchronisableVariableBase*> syncList;
Note: See TracChangeset
for help on using the changeset viewer.