Changeset 2990 for code/branches/netp3/src
- Timestamp:
- May 19, 2009, 9:35:10 PM (16 years ago)
- Location:
- code/branches/netp3
- Files:
-
- 103 edited
- 10 copied
Legend:
- Unmodified
- Added
- Removed
-
code/branches/netp3
- Property svn:mergeinfo changed
/code/branches/netp2 (added) merged: 2835-2836,2861,2937-2938,2940-2941,2943-2945,2947-2949,2951,2953,2964-2965,2974-2976
- Property svn:mergeinfo changed
-
code/branches/netp3/src/core/LuaBind.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/core/LuaBind.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/core/Template.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/core/Template.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/core/XMLFile.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/core/XMLIncludes.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/cpptcl/cpptcl.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/cpptcl/cpptcl.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/network/CMakeLists.txt
r2748 r2990 25 25 ClientConnectionListener.cc 26 26 ConnectionManager.cc 27 FunctionCallManager.cc 27 28 GamestateManager.cc 28 29 GamestateClient.cc 29 30 GamestateHandler.cc 31 NetworkFunction.cc 32 Host.cc 30 33 PacketBuffer.cc 31 34 Server.cc 32 35 TrafficControl.cc 33 Host.cc34 36 ) 35 37 ADD_SUBDIRECTORY(packet) -
code/branches/netp3/src/network/Client.cc
r2896 r2990 48 48 #include "core/CoreIncludes.h" 49 49 #include "packet/Packet.h" 50 #include "FunctionCallManager.h" 50 51 51 52 // #include "packet/Acknowledgement.h" … … 140 141 */ 141 142 void Client::update(const Clock& time){ 142 // COUT(3) << "."; 143 if(client_connection.isConnected() && isSynched_){ 144 COUT(4) << "popping partial gamestate: " << std::endl; 145 packet::Gamestate *gs = gamestate.getGamestate(); 146 if(gs){ 147 COUT(4) << "client tick: sending gs " << gs << std::endl; 148 if( !gs->send() ) 149 COUT(3) << "Problem adding partial gamestate to queue" << std::endl; 143 //this steers our network frequency 144 timeSinceLastUpdate_+=time; 145 if(timeSinceLastUpdate_>=NETWORK_PERIOD){ 146 timeSinceLastUpdate_ -= static_cast<unsigned int>( timeSinceLastUpdate_ / NETWORK_PERIOD ) * NETWORK_PERIOD; 147 // COUT(3) << "."; 148 if(client_connection.isConnected() && isSynched_){ 149 COUT(4) << "popping partial gamestate: " << std::endl; 150 packet::Gamestate *gs = gamestate.getGamestate(); 151 if(gs){ 152 COUT(4) << "client tick: sending gs " << gs << std::endl; 153 if( !gs->send() ) 154 COUT(3) << "Problem adding partial gamestate to queue" << std::endl; 150 155 // gs gets automatically deleted by enet callback 156 } 157 FunctionCallManager::sendCalls(); 151 158 } 159 ENetEvent *event; 160 // stop if the packet queue is empty 161 while(!(client_connection.queueEmpty())){ 162 event = client_connection.getEvent(); 163 COUT(5) << "tick packet size " << event->packet->dataLength << std::endl; 164 packet::Packet *packet = packet::Packet::createPacket(event->packet, event->peer); 165 // note: packet commits suicide here except for the GameState. That is then deleted by a GamestateHandler 166 bool b = packet->process(); 167 assert(b); 168 } 169 if(gamestate.processGamestates()) 170 { 171 if(!isSynched_) 172 isSynched_=true; 173 } 174 gamestate.cleanup(); 152 175 } 153 ENetEvent *event; 154 // stop if the packet queue is empty 155 while(!(client_connection.queueEmpty())){ 156 event = client_connection.getEvent(); 157 COUT(5) << "tick packet size " << event->packet->dataLength << std::endl; 158 packet::Packet *packet = packet::Packet::createPacket(event->packet, event->peer); 159 // note: packet commits suicide here except for the GameState. That is then deleted by a GamestateHandler 160 bool b = packet->process(); 161 assert(b); 162 } 163 if(gamestate.processGamestates()) 164 { 165 if(!isSynched_) 166 isSynched_=true; 167 } 168 gamestate.cleanup(); 176 169 177 return; 170 178 } -
code/branches/netp3/src/network/Client.h
r2896 r2990 88 88 89 89 bool gameStateFailure_; 90 float timeSinceLastUpdate_; 90 91 }; 91 92 -
code/branches/netp3/src/network/ClientConnection.cc
r2773 r2990 42 42 #include <enet/enet.h> 43 43 #include <iostream> 44 #include <cassert> 44 45 // boost.thread library for multithreading support 45 46 #include <boost/thread/thread.hpp> … … 57 58 58 59 ClientConnection::ClientConnection(int port, const std::string& address) { 59 quit =false;60 quit_=false; 60 61 server=NULL; 61 62 serverAddress = new ENetAddress(); … … 66 67 67 68 ClientConnection::ClientConnection(int port, const char *address) { 68 quit =false;69 quit_=false; 69 70 server=NULL; 70 71 serverAddress = new ENetAddress(); … … 106 107 107 108 bool ClientConnection::closeConnection() { 108 quit =true;109 quit_=true; 109 110 //network_threads.join_all(); 110 111 receiverThread_->join(); … … 150 151 COUT(2) << "ClientConnection: could not create client host" << std::endl; 151 152 // add some error handling here ========================== 152 quit =true;153 quit_=true; 153 154 } 154 155 //connect to the server 155 156 if(!establishConnection()){ 156 157 COUT(2) << "clientConn: receiver thread: could not establishConnection" << std::endl; 157 quit =true;158 quit_=true; 158 159 return; 159 160 } 160 161 event = new ENetEvent; 161 162 //main loop 162 while(!quit ){163 while(!quit_){ 163 164 //std::cout << "connection loop" << std::endl; 164 165 { … … 166 167 if(enet_host_service(client, event, NETWORK_CLIENT_WAIT_TIME)<0){ 167 168 // we should never reach this point 168 quit=true; 169 continue; 169 // assert(0); 170 printf("ClientConnection: ENet returned with an error!\n"); 171 quit_=true; 172 break; 170 173 // add some error handling here ======================== 171 174 } … … 183 186 break; 184 187 case ENET_EVENT_TYPE_DISCONNECT: 185 quit=true; 188 quit_=true; 189 printf("Received disconnect Packet from Server!\n"); 186 190 // server closed the connection 187 191 return; … … 206 210 boost::recursive_mutex::scoped_lock lock(enet_mutex_g); 207 211 enet_peer_disconnect(server, 0); 208 while(enet_host_service(client, &event, NETWORK_CLIENT_WAIT_TIME) > 0){212 while(enet_host_service(client, &event, NETWORK_CLIENT_WAIT_TIME) >= 0){ 209 213 switch (event.type) 210 214 { … … 233 237 } 234 238 // handshake 235 while(enet_host_service(client, &event, NETWORK_CLIENT_WAIT_TIME)>=0 && !quit ){239 while(enet_host_service(client, &event, NETWORK_CLIENT_WAIT_TIME)>=0 && !quit_){ 236 240 if( event.type == ENET_EVENT_TYPE_CONNECT ){ 237 241 established=true; -
code/branches/netp3/src/network/ClientConnection.h
r2773 r2990 53 53 const int NETWORK_PORT = 55556; 54 54 const int NETWORK_CLIENT_MAX_CONNECTIONS = 5; 55 const int NETWORK_CLIENT_WAIT_TIME = 1 ;55 const int NETWORK_CLIENT_WAIT_TIME = 10; 56 56 const int NETWORK_CLIENT_CONNECT_TIMEOUT = 3000; // miliseconds 57 57 const int NETWORK_CLIENT_CHANNELS = 2; … … 76 76 //bool sendPackets(ENetEvent *event); 77 77 bool waitEstablished(int milisec); 78 bool isConnected(){return established;} 78 inline bool isConnected(){return established;} 79 inline bool checkConnection(){ return !quit_ && isConnected(); } 79 80 private: 80 81 ClientConnection(const ClientConnection& copy); // not used … … 90 91 ENetAddress *serverAddress; 91 92 // quit-variable (communication with threads) 92 bool quit ;93 bool quit_; 93 94 bool established; 94 95 // clientlist -
code/branches/netp3/src/network/ConnectionManager.cc
r2896 r2990 58 58 { 59 59 bool operator< (ENetAddress a, ENetAddress b) { 60 if(a.host <= b.host) 61 return true; 62 else 63 return false; 60 return a.host <= b.host; 64 61 } 65 62 } … … 75 72 assert(instance_==0); 76 73 instance_=this; 77 quit =false;74 quit_=false; 78 75 bindAddress = new ENetAddress(); 79 76 bindAddress->host = ENET_HOST_ANY; … … 84 81 assert(instance_==0); 85 82 instance_=this; 86 quit =false;83 quit_=false; 87 84 bindAddress = new ENetAddress(); 88 85 bindAddress->host = ENET_HOST_ANY; … … 93 90 assert(instance_==0); 94 91 instance_=this; 95 quit =false;92 quit_=false; 96 93 bindAddress = new ENetAddress(); 97 94 enet_address_set_host (bindAddress, address.c_str()); … … 102 99 assert(instance_==0); 103 100 instance_=this; 104 quit =false;101 quit_=false; 105 102 bindAddress = new ENetAddress(); 106 103 enet_address_set_host (bindAddress, address); … … 109 106 110 107 ConnectionManager::~ConnectionManager(){ 111 if(!quit )108 if(!quit_) 112 109 quitListener(); 113 110 instance_=0; … … 133 130 134 131 bool ConnectionManager::quitListener() { 135 quit =true;132 quit_=true; 136 133 receiverThread_->join(); 137 134 return true; … … 189 186 if(server==NULL){ 190 187 // add some error handling here ========================== 191 quit =true;188 quit_=true; 192 189 return; 193 190 } 194 191 195 192 event = new ENetEvent; 196 while(!quit){ 193 while(!quit_) 194 { 197 195 { //mutex scope 198 196 boost::recursive_mutex::scoped_lock lock(enet_mutex_g); 199 197 if(enet_host_service(server, event, NETWORK_WAIT_TIMEOUT)<0){ 200 198 // we should never reach this point 201 quit=true; 199 printf("ConnectionManager: ENet returned with an error\n"); 200 quit_=true; 202 201 continue; 202 printf("waaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahhhhhhhhhhhhhhhh"); 203 203 // add some error handling here ======================== 204 204 } … … 208 208 // log handling ================ 209 209 case ENET_EVENT_TYPE_CONNECT: 210 printf("===================================================================="); 210 211 case ENET_EVENT_TYPE_DISCONNECT: 211 212 case ENET_EVENT_TYPE_RECEIVE: … … 215 216 case ENET_EVENT_TYPE_NONE: 216 217 //receiverThread_->yield(); 217 msleep(1 );218 msleep(10); 218 219 break; 219 220 } … … 267 268 } 268 269 269 bool ConnectionManager::processData(ENetEvent *event) {270 // just add packet to the buffer271 // this can be extended with some preprocessing272 return buffer.push(event);273 }274 275 276 270 277 271 int ConnectionManager::getClientID(ENetPeer* peer) { -
code/branches/netp3/src/network/ConnectionManager.h
r2773 r2990 55 55 const int NETWORK_PORT = 55556; 56 56 const int NETWORK_MAX_CONNECTIONS = 50; 57 const int NETWORK_WAIT_TIMEOUT = 1 ;57 const int NETWORK_WAIT_TIMEOUT = 10; 58 58 const int NETWORK_DEFAULT_CHANNEL = 0; 59 59 … … 81 81 void disconnectClient(ClientInformation *client); 82 82 void syncClassid(unsigned int clientID); 83 bool checkReceiverThread(){ return !quit_; } 83 84 84 85 private: 85 86 ConnectionManager(const ConnectionManager& copy); // not used 86 bool processData(ENetEvent *event);87 inline bool processData(ENetEvent *event){ return buffer.push(event); } 87 88 void receiverThread(); 88 89 void disconnectClients(); … … 95 96 ENetAddress *bindAddress; 96 97 97 bool quit ; // quit-variable (communication with threads)98 bool quit_; // quit-variable (communication with threads) 98 99 99 100 boost::thread *receiverThread_; -
code/branches/netp3/src/network/Host.h
r2171 r2990 35 35 36 36 namespace orxonox { 37 38 const int CLIENTID_SERVER = 0; 39 const unsigned int NETWORK_FREQUENCY = 25; 40 const float NETWORK_PERIOD = 1.0f/NETWORK_FREQUENCY; 37 41 38 42 /** -
code/branches/netp3/src/network/NetworkPrereqs.h
r2773 r2990 90 90 class ClientInformation; 91 91 class ConnectionManager; 92 class FunctionCallManager; 92 93 class GamestateClient; 93 94 class GamestateManager; … … 96 97 template <class T> class NetworkCallback; 97 98 class NetworkCallbackManager; 99 class NetworkFunctionBase; 100 class NetworkFunctionStatic; 101 class NetworkMemberFunctionBase; 102 template <class T> class NetworkMemeberFunction; 103 struct NetworkFunctionPointer; 98 104 class PacketBuffer; 99 105 class Server; … … 112 118 namespace packet 113 119 { 120 class Acknowledgement; 121 class Chat; 122 class ClassID; 123 class FunctionCalls; 124 class FunctionIDs; 114 125 class Gamestate; 126 class NetworkIDs; 115 127 class Packet; 116 class Acknowledgement;117 class ClassID;118 128 class Welcome; 119 class Chat;120 129 } 121 130 } -
code/branches/netp3/src/network/Server.cc
r2896 r2990 61 61 #include "util/Convert.h" 62 62 #include "ChatListener.h" 63 #include "FunctionCallManager.h" 64 #include "packet/FunctionIDs.h" 65 63 66 64 67 namespace orxonox … … 158 161 gamestates_->processGamestates(); 159 162 updateGamestate(); 163 FunctionCallManager::sendCalls(); 160 164 } 161 165 } … … 341 345 return false; 342 346 } 343 COUT(4) << "Con.Man: creating client id: " << temp->getID() << std::endl; 347 COUT(5) << "Con.Man: creating client id: " << temp->getID() << std::endl; 348 349 // synchronise class ids 344 350 connection->syncClassid(temp->getID()); 351 352 // now synchronise functionIDs 353 packet::FunctionIDs *fIDs = new packet::FunctionIDs(); 354 fIDs->setClientID(clientID); 355 bool b = fIDs->send(); 356 assert(b); 357 345 358 temp->setSynched(true); 346 COUT( 3) << "sending welcome" << std::endl;359 COUT(4) << "sending welcome" << std::endl; 347 360 packet::Welcome *w = new packet::Welcome(temp->getID(), temp->getShipID()); 348 361 w->setClientID(temp->getID()); 349 b ool b= w->send();362 b = w->send(); 350 363 assert(b); 351 364 packet::Gamestate *g = new packet::Gamestate(); -
code/branches/netp3/src/network/Server.h
r2896 r2990 51 51 namespace orxonox 52 52 { 53 const int CLIENTID_SERVER = 0;54 const unsigned int NETWORK_FREQUENCY = 25;55 const float NETWORK_PERIOD = 1.f/NETWORK_FREQUENCY;56 53 57 54 /** -
code/branches/netp3/src/network/TrafficControl.cc
r2896 r2990 91 91 void TrafficControl::setConfigValues() 92 92 { 93 SetConfigValue ( bActive_, true );94 SetConfigValue ( targetSize, 5000 );93 SetConfigValue ( bActive_, false ); 94 SetConfigValue ( targetSize, 10000 ); 95 95 } 96 96 -
code/branches/netp3/src/network/packet/CMakeLists.txt
r2710 r2990 1 1 ADD_SOURCE_FILES(NETWORK_SRC_FILES 2 2 Packet.cc 3 Acknowledgement.cc 3 4 Chat.cc 4 5 ClassID.cc 5 Acknowledgement.cc 6 DeleteObjects.cc 7 FunctionIDs.cc 8 FunctionCalls.cc 6 9 Gamestate.cc 7 10 Welcome.cc 8 DeleteObjects.cc9 11 ) -
code/branches/netp3/src/network/packet/ClassID.cc
r2773 r2990 93 93 } 94 94 95 COUT( 0) << "classid packetSize is " << packetSize << endl;95 COUT(5) << "classid packetSize is " << packetSize << endl; 96 96 97 97 } -
code/branches/netp3/src/network/packet/Gamestate.cc
r2896 r2990 107 107 for(it = ObjectList<Synchronisable>::begin(); it; ++it){ 108 108 109 tempsize=it->getSize(id, mode); 109 // tempsize=it->getSize(id, mode); 110 111 tempsize = it->getData(mem, id, mode); 112 if ( it->doSync( id, mode ) ) 113 dataMap_.push_back( obj(it->getObjectID(), it->getCreatorID(), tempsize, mem-data_) ); 114 110 115 #ifndef NDEBUG 111 116 if(currentsize+tempsize > size){ … … 123 128 }// stop allocate additional memory 124 129 #endif 125 126 if ( it->doSync( id, mode ) ) 127 dataMap_.push_back( obj(it->getObjectID(), it->getCreatorID(), tempsize, mem-data_) ); 128 if(!it->getData(mem, id, mode)) 129 return false; // mem pointer gets automatically increased because of call by reference 130 // if(!it->getData(mem, id, mode)) 131 // return false; // mem pointer gets automatically increased because of call by reference 130 132 // increase size counter by size of current synchronisable 131 133 currentsize+=tempsize; -
code/branches/netp3/src/network/packet/Packet.cc
r2773 r2990 39 39 40 40 #include "Acknowledgement.h" 41 #include "DeleteObjects.h" 41 42 #include "Chat.h" 42 43 #include "ClassID.h" 44 #include "FunctionCalls.h" 45 #include "FunctionIDs.h" 43 46 #include "Gamestate.h" 44 47 #include "Welcome.h" 45 #include "DeleteObjects.h"46 48 #include "network/Host.h" 47 49 #include "core/CoreIncludes.h" … … 153 155 case ENUM::Welcome: 154 156 case ENUM::DeleteObjects: 157 case ENUM::FunctionIDs: 158 case ENUM::FunctionCalls: 155 159 break; 156 160 default: … … 170 174 unsigned int clientID = ClientInformation::findClient(&peer->address)->getID(); 171 175 Packet *p = 0; 172 COUT( 5) << "packet type: " << *(ENUM::Type *)&data[_PACKETID] << std::endl;176 COUT(6) << "packet type: " << *(ENUM::Type *)&data[_PACKETID] << std::endl; 173 177 switch( *(ENUM::Type *)(data + _PACKETID) ) 174 178 { 175 179 case ENUM::Acknowledgement: 176 COUT( 4) << "ack" << std::endl;180 COUT(5) << "ack" << std::endl; 177 181 p = new Acknowledgement( data, clientID ); 178 182 break; 179 183 case ENUM::Chat: 180 COUT( 4) << "chat" << std::endl;184 COUT(5) << "chat" << std::endl; 181 185 p = new Chat( data, clientID ); 182 186 break; 183 187 case ENUM::ClassID: 184 COUT( 4) << "classid" << std::endl;188 COUT(5) << "classid" << std::endl; 185 189 p = new ClassID( data, clientID ); 186 190 break; 187 191 case ENUM::Gamestate: 188 COUT( 4) << "gamestate" << std::endl;192 COUT(5) << "gamestate" << std::endl; 189 193 // TODO: remove brackets 190 194 p = new Gamestate( data, clientID ); 191 195 break; 192 196 case ENUM::Welcome: 193 COUT( 4) << "welcome" << std::endl;197 COUT(5) << "welcome" << std::endl; 194 198 p = new Welcome( data, clientID ); 195 199 break; 196 200 case ENUM::DeleteObjects: 197 COUT( 4) << "deleteobjects" << std::endl;201 COUT(5) << "deleteobjects" << std::endl; 198 202 p = new DeleteObjects( data, clientID ); 203 break; 204 case ENUM::FunctionCalls: 205 COUT(5) << "functionCalls" << std::endl; 206 p = new FunctionCalls( data, clientID ); 207 break; 208 case ENUM::FunctionIDs: 209 COUT(5) << "functionIDs" << std::endl; 210 p = new FunctionIDs( data, clientID ); 199 211 break; 200 212 default: -
code/branches/netp3/src/network/packet/Packet.h
r2773 r2990 45 45 enum Type{ 46 46 Acknowledgement, 47 Chat, 48 ClassID, 49 DeleteObjects, 50 FunctionIDs, 51 FunctionCalls, 47 52 Gamestate, 48 ClassID, 49 Chat, 50 Welcome, 51 DeleteObjects 53 Welcome 52 54 }; 53 55 } … … 66 68 virtual unsigned int getSize() const =0; 67 69 virtual bool process()=0; 68 uint32_t getFlags()70 inline uint32_t getFlags() 69 71 { return flags_; } 70 in t getClientID()72 inline int getClientID() 71 73 { return clientID_; } 72 void setClientID( int id )74 inline void setClientID( int id ) 73 75 { clientID_ = id; } 74 76 … … 78 80 Packet(uint8_t *data, unsigned int clientID); 79 81 // Packet(ENetPacket *packet, ENetPeer *peer); 82 inline bool isDataENetAllocated() const 83 { return bDataENetAllocated_; } 84 80 85 uint32_t flags_; 81 86 unsigned int clientID_; -
code/branches/netp3/src/network/synchronisable/NetworkCallback.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/network/synchronisable/NetworkCallbackManager.cc
r2662 r2990 32 32 33 33 namespace orxonox{ 34 34 35 35 std::set<NetworkCallbackBase*> NetworkCallbackManager::callbackSet_; 36 36 std::queue<NetworkCallbackBase*> NetworkCallbackManager::triggeredCallbacks_; … … 60 60 while( triggeredCallbacks_.empty()==false ) 61 61 { 62 triggeredCallbacks_.front()->call(); 62 //make sure callback hasn't been deleted before 63 if ( callbackSet_.find(triggeredCallbacks_.front()) != callbackSet_.end() ) 64 triggeredCallbacks_.front()->call(); 63 65 triggeredCallbacks_.pop(); 64 66 } -
code/branches/netp3/src/network/synchronisable/Synchronisable.cc
- Property svn:mergeinfo changed
/code/branches/netp2/src/network/synchronisable/Synchronisable.cc (added) merged: 2836
r2911 r2990 66 66 objectID=OBJECTID_UNKNOWN; 67 67 classID = static_cast<uint32_t>(-1); 68 68 69 // set dataSize to 0 70 this->dataSize_ = 0; 69 71 // set standard priority 70 72 this->setPriority( priority::normal ); … … 96 98 // delete callback function objects 97 99 if(!Identifier::isCreatingHierarchy()){ 98 for(std:: list<SynchronisableVariableBase*>::iterator it = syncList.begin(); it!=syncList.end(); it++)100 for(std::vector<SynchronisableVariableBase*>::iterator it = syncList.begin(); it!=syncList.end(); it++) 99 101 delete (*it); 100 102 if (this->objectMode_ != 0x0 && (Host::running() && Host::isServer())) … … 236 238 * @return true: if !doSync or if everything was successfully saved 237 239 */ 238 boolSynchronisable::getData(uint8_t*& mem, int32_t id, uint8_t mode){240 uint32_t Synchronisable::getData(uint8_t*& mem, int32_t id, uint8_t mode){ 239 241 if(mode==0x0) 240 242 mode=state_; 241 243 //if this tick is we dont synchronise, then abort now 242 244 if(!doSync(id, mode)) 243 return true;245 return 0; 244 246 uint32_t tempsize = 0; 245 247 if (this->classID==0) … … 250 252 251 253 assert(this->classID==this->getIdentifier()->getNetworkID()); 252 std::list<SynchronisableVariableBase*>::iterator i; 253 uint32_t size; 254 size=getSize(id, mode); 254 std::vector<SynchronisableVariableBase*>::iterator i; 255 255 256 256 // start copy header 257 257 SynchronisableHeader header(mem); 258 header.setDataSize( size ); 258 mem += SynchronisableHeader::getSize(); 259 // end copy header 260 261 262 COUT(5) << "Synchronisable getting data from objectID: " << objectID << " classID: " << classID << std::endl; 263 // copy to location 264 for(i=syncList.begin(); i!=syncList.end(); ++i){ 265 tempsize += (*i)->getData( mem, mode ); 266 //tempsize += (*i)->getSize( mode ); 267 } 268 269 tempsize += SynchronisableHeader::getSize(); 259 270 header.setObjectID( this->objectID ); 260 271 header.setCreatorID( this->creatorID ); 261 272 header.setClassID( this->classID ); 262 273 header.setDataAvailable( true ); 263 tempsize += SynchronisableHeader::getSize(); 264 mem += SynchronisableHeader::getSize(); 265 // end copy header 266 267 268 COUT(5) << "Synchronisable getting data from objectID: " << objectID << " classID: " << classID << " length: " << size << std::endl; 269 // copy to location 270 for(i=syncList.begin(); i!=syncList.end(); ++i){ 271 (*i)->getData( mem, mode ); 272 tempsize += (*i)->getSize( mode ); 273 } 274 header.setDataSize( tempsize ); 275 276 #ifndef NDEBUG 277 uint32_t size; 278 size=getSize(id, mode); 274 279 assert(tempsize==size); 275 return true; 280 #endif 281 return tempsize; 276 282 } 277 283 … … 286 292 if(mode==0x0) 287 293 mode=state_; 288 std:: list<SynchronisableVariableBase *>::iterator i;294 std::vector<SynchronisableVariableBase *>::iterator i; 289 295 if(syncList.empty()){ 290 296 assert(0); … … 325 331 uint32_t Synchronisable::getSize(int32_t id, uint8_t mode){ 326 332 int tsize=SynchronisableHeader::getSize(); 327 if (mode==0x0)333 if (mode==0x0) 328 334 mode=state_; 329 if (!doSync(id, mode))335 if (!doSync(id, mode)) 330 336 return 0; 331 std::list<SynchronisableVariableBase*>::iterator i; 332 for(i=syncList.begin(); i!=syncList.end(); i++){ 337 assert( mode==state_ ); 338 tsize += this->dataSize_; 339 std::vector<SynchronisableVariableBase*>::iterator i; 340 for(i=stringList.begin(); i!=stringList.end(); ++i){ 333 341 tsize += (*i)->getSize( mode ); 334 342 } - Property svn:mergeinfo changed
-
code/branches/netp3/src/network/synchronisable/Synchronisable.h
- Property svn:mergeinfo changed
/code/branches/netp2/src/network/synchronisable/Synchronisable.h (added) merged: 2836,2937,2940
r2911 r2990 33 33 34 34 #include <list> 35 #include <vector> 35 36 #include <map> 36 37 #include <queue> 37 38 #include <cassert> 39 #include <string> 38 40 #include "util/Math.h" 39 41 #include "util/mbool.h" … … 120 122 public: 121 123 friend class packet::Gamestate; 122 // friend class Server;123 124 virtual ~Synchronisable(); 124 125 … … 139 140 Synchronisable(BaseObject* creator); 140 141 template <class T> void registerVariable(T& variable, uint8_t mode=0x1, NetworkCallbackBase *cb=0, bool bidirectional=false); 141 template <class T> void unregisterVariable(T& var);142 //template <class T> void unregisterVariable(T& var); 142 143 void setObjectMode(uint8_t mode); 143 144 void setPriority(unsigned int freq){ objectFrequency_ = freq; } … … 145 146 146 147 private: 147 boolgetData(uint8_t*& men, int32_t id, uint8_t mode=0x0);148 uint32_t getData(uint8_t*& men, int32_t id, uint8_t mode=0x0); 148 149 uint32_t getSize(int32_t id, uint8_t mode=0x0); 149 150 bool updateData(uint8_t*& mem, uint8_t mode=0x0, bool forceCallback=false); … … 155 156 uint32_t classID; 156 157 157 std::list<SynchronisableVariableBase*> syncList; 158 std::vector<SynchronisableVariableBase*> syncList; 159 std::vector<SynchronisableVariableBase*> stringList; 160 uint32_t dataSize_; //size of all variables except strings 158 161 static uint8_t state_; // detemines wheter we are server (default) or client 159 162 bool backsync_; // if true the variables with mode > 1 will be synchronised to server (client -> server) … … 164 167 }; 165 168 166 template <class T> void Synchronisable::registerVariable(T& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional)167 {168 if (bidirectional)169 syncList.push_back(new SynchronisableVariableBidirectional<const T>(variable, mode, cb));170 else171 syncList.push_back(new SynchronisableVariable<const T>(variable, mode, cb));172 }173 174 template <class T> void Synchronisable::unregisterVariable(T& var){175 std::list<SynchronisableVariableBase*>::iterator it = syncList.begin();176 while(it!=syncList.end()){177 if( ((*it)->getReference()) == &var ){178 delete (*it);179 syncList.erase(it);180 return;181 }182 else183 it++;184 }185 bool unregistered_nonexistent_variable = false;186 assert(unregistered_nonexistent_variable); //if we reach this point something went wrong:187 // the variable has not been registered before188 }189 190 169 // ================= Specialisation declarations 170 171 // template <> _NetworkExport void Synchronisable::registerVariable( const std::string& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional); 172 template <> _NetworkExport void Synchronisable::registerVariable( std::string& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional); 191 173 template <> _NetworkExport void Synchronisable::registerVariable( const ColourValue& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 192 174 template <> _NetworkExport void Synchronisable::registerVariable( ColourValue& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); … … 200 182 template <> _NetworkExport void Synchronisable::registerVariable( const Quaternion& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 201 183 template <> _NetworkExport void Synchronisable::registerVariable( Quaternion& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 184 185 template <class T> void Synchronisable::registerVariable(T& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional) 186 { 187 if (bidirectional) 188 { 189 syncList.push_back(new SynchronisableVariableBidirectional<const T>(variable, mode, cb)); 190 this->dataSize_ += syncList.back()->getSize(state_); 191 } 192 else 193 { 194 syncList.push_back(new SynchronisableVariable<const T>(variable, mode, cb)); 195 if ( this->state_ == mode ) 196 this->dataSize_ += syncList.back()->getSize(state_); 197 } 198 } 199 200 201 202 // template <class T> void Synchronisable::unregisterVariable(T& var){ 203 // std::vector<SynchronisableVariableBase*>::iterator it = syncList.begin(); 204 // while(it!=syncList.end()){ 205 // if( ((*it)->getReference()) == &var ){ 206 // delete (*it); 207 // syncList.erase(it); 208 // return; 209 // } 210 // else 211 // it++; 212 // } 213 // bool unregistered_nonexistent_variable = false; 214 // assert(unregistered_nonexistent_variable); //if we reach this point something went wrong: 215 // // the variable has not been registered before 216 // } 217 218 202 219 } 203 220 - Property svn:mergeinfo changed
-
code/branches/netp3/src/network/synchronisable/SynchronisableSpecialisations.cc
r2662 r2990 29 29 30 30 #include "network/synchronisable/Synchronisable.h" 31 #include <string> 31 32 32 33 // ================ template spezialisation … … 34 35 35 36 namespace orxonox{ 37 38 // template <> void Synchronisable::registerVariable( const std::string& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional) 39 // { 40 // if (bidirectional) 41 // syncList.push_back(new SynchronisableVariableBidirectional<const std::string>(variable, mode, cb)); 42 // else 43 // syncList.push_back(new SynchronisableVariable<const std::string>(variable, mode, cb)); 44 // stringList.push_back(syncList.back()); 45 // } 46 47 template <> void Synchronisable::registerVariable( std::string& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional) 48 { 49 if (bidirectional) 50 syncList.push_back(new SynchronisableVariableBidirectional<const std::string>(variable, mode, cb)); 51 else 52 syncList.push_back(new SynchronisableVariable<const std::string>(variable, mode, cb)); 53 stringList.push_back(syncList.back()); 54 } 36 55 37 56 template <> void Synchronisable::registerVariable( const ColourValue& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional) … … 52 71 registerVariable(variable.y, mode, cb, bidirectional); 53 72 } 54 template <> void Synchronisable::registerVariable( Vector2& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional)55 {56 registerVariable( (const ColourValue&)variable, mode, cb, bidirectional);57 }73 // template <> void Synchronisable::registerVariable( Vector2& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional) 74 // { 75 // registerVariable( (const ColourValue&)variable, mode, cb, bidirectional); 76 // } 58 77 59 78 template <> void Synchronisable::registerVariable( const Vector3& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional) -
code/branches/netp3/src/network/synchronisable/SynchronisableVariable.h
r2896 r2990 21 21 * 22 22 * Author: 23 * Oliver Scheuss , (C) 200823 * Oliver Scheuss 24 24 * Co-authors: 25 25 * ... … … 35 35 #include <string> 36 36 #include <cassert> 37 #include "util/Math.h" 37 #include "util/Serialise.h" 38 #include "core/Core.h" 39 #include "core/CoreIncludes.h" 38 40 #include "network/synchronisable/NetworkCallback.h" 39 41 #include "network/synchronisable/NetworkCallbackManager.h" … … 55 57 { 56 58 public: 57 virtual voidgetData(uint8_t*& mem, uint8_t mode)=0;59 virtual uint32_t getData(uint8_t*& mem, uint8_t mode)=0; 58 60 virtual void putData(uint8_t*& mem, uint8_t mode, bool forceCallback = false)=0; 59 61 virtual uint32_t getSize(uint8_t mode)=0; … … 74 76 75 77 virtual inline uint8_t getMode(){ return mode_; } 76 virtual inline voidgetData(uint8_t*& mem, uint8_t mode);78 virtual inline uint32_t getData(uint8_t*& mem, uint8_t mode); 77 79 virtual inline void putData(uint8_t*& mem, uint8_t mode, bool forceCallback = false); 78 80 virtual inline uint32_t getSize(uint8_t mode); 79 81 virtual inline void* getReference(){ return (void *)&this->variable_; } 80 82 protected: 81 82 void setAndIncrease(uint8_t*& mem);83 void getAndIncrease(uint8_t*& mem);84 83 // inline bool checkEquality(uint8_t* mem); 84 // inline void loadAndIncrease(uint8_t*& mem); 85 // inline void saveAndIncrease(uint8_t*& mem); 86 // inline uint32_t returnSize(); 85 87 86 88 T& variable_; … … 97 99 98 100 virtual inline uint8_t getMode(){ return 0x3; } //this basically is a hack ^^ 99 virtual voidgetData(uint8_t*& mem, uint8_t mode);101 virtual inline uint32_t getData(uint8_t*& mem, uint8_t mode); 100 102 virtual void putData(uint8_t*& mem, uint8_t mode, bool forceCallback = false); 101 virtual uint32_t getSize(uint8_t mode);103 virtual inline uint32_t getSize(uint8_t mode); 102 104 private: 103 105 T varBuffer_; … … 119 121 } 120 122 121 template <class T> voidSynchronisableVariable<T>::getData(uint8_t*& mem, uint8_t mode)123 template <class T> inline uint32_t SynchronisableVariable<T>::getData(uint8_t*& mem, uint8_t mode) 122 124 { 123 125 if ( state_ == this->mode_ ) 124 getAndIncrease( mem ); 126 { 127 saveAndIncrease( this->variable_, mem ); 128 return returnSize( this->variable_ ); 129 } 130 else 131 return 0; 125 132 // mem += SynchronisableVariable<T>::getSize(); 126 133 } … … 135 142 if ( this->callback_ != 0 ) 136 143 { 137 if( forceCallback || !checkEquality( mem ) )144 if( forceCallback || !checkEquality( this->variable_, mem ) ) 138 145 callback = true; 139 146 } 140 147 // write the data 141 setAndIncrease( mem ); 142 // mem += SynchronisableVariable<T>::getSize(); 148 loadAndIncrease( this->variable_, mem ); 143 149 // now do a callback if neccessary 144 150 if ( callback ) 145 151 NetworkCallbackManager::triggerCallback( this->callback_ ); 146 //this->callback_->call(); 147 } 148 149 template <class T> uint32_t SynchronisableVariable<T>::getSize(uint8_t mode) 152 } 153 154 template <class T> inline uint32_t SynchronisableVariable<T>::getSize(uint8_t mode) 150 155 { 151 156 if ( mode == this->mode_ ) 152 return returnSize( );157 return returnSize( this->variable_ ); 153 158 else 154 159 return 0; 155 160 } 156 161 157 template <> _NetworkExport uint32_t SynchronisableVariable<const bool>::returnSize();158 template <> _NetworkExport void SynchronisableVariable<const bool>:: setAndIncrease(uint8_t*& mem);159 template <> _NetworkExport void SynchronisableVariable<const bool>:: getAndIncrease(uint8_t*& mem);162 /*template <> _NetworkExport uint32_t SynchronisableVariable<const bool>::returnSize(); 163 template <> _NetworkExport void SynchronisableVariable<const bool>::loadAndIncrease(uint8_t*& mem); 164 template <> _NetworkExport void SynchronisableVariable<const bool>::saveAndIncrease(uint8_t*& mem); 160 165 template <> _NetworkExport bool SynchronisableVariable<const bool>::checkEquality(uint8_t* mem); 161 166 template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned char>::returnSize(); 162 template <> _NetworkExport void SynchronisableVariable<const unsigned char>:: setAndIncrease(uint8_t*& mem);163 template <> _NetworkExport void SynchronisableVariable<const unsigned char>:: getAndIncrease(uint8_t*& mem);167 template <> _NetworkExport void SynchronisableVariable<const unsigned char>::loadAndIncrease(uint8_t*& mem); 168 template <> _NetworkExport void SynchronisableVariable<const unsigned char>::saveAndIncrease(uint8_t*& mem); 164 169 template <> _NetworkExport bool SynchronisableVariable<const unsigned char>::checkEquality(uint8_t* mem); 165 170 template <> _NetworkExport uint32_t SynchronisableVariable<const short>::returnSize(); 166 template <> _NetworkExport void SynchronisableVariable<const short>:: setAndIncrease(uint8_t*& mem);167 template <> _NetworkExport void SynchronisableVariable<const short>:: getAndIncrease(uint8_t*& mem);171 template <> _NetworkExport void SynchronisableVariable<const short>::loadAndIncrease(uint8_t*& mem); 172 template <> _NetworkExport void SynchronisableVariable<const short>::saveAndIncrease(uint8_t*& mem); 168 173 template <> _NetworkExport bool SynchronisableVariable<const short>::checkEquality(uint8_t* mem); 169 174 template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned short>::returnSize(); 170 template <> _NetworkExport void SynchronisableVariable<const unsigned short>:: setAndIncrease(uint8_t*& mem);171 template <> _NetworkExport void SynchronisableVariable<const unsigned short>:: getAndIncrease(uint8_t*& mem);175 template <> _NetworkExport void SynchronisableVariable<const unsigned short>::loadAndIncrease(uint8_t*& mem); 176 template <> _NetworkExport void SynchronisableVariable<const unsigned short>::saveAndIncrease(uint8_t*& mem); 172 177 template <> _NetworkExport bool SynchronisableVariable<const unsigned short>::checkEquality(uint8_t* mem); 173 178 template <> _NetworkExport uint32_t SynchronisableVariable<const int>::returnSize(); 174 template <> _NetworkExport void SynchronisableVariable<const int>:: setAndIncrease(uint8_t*& mem);175 template <> _NetworkExport void SynchronisableVariable<const int>:: getAndIncrease(uint8_t*& mem);179 template <> _NetworkExport void SynchronisableVariable<const int>::loadAndIncrease(uint8_t*& mem); 180 template <> _NetworkExport void SynchronisableVariable<const int>::saveAndIncrease(uint8_t*& mem); 176 181 template <> _NetworkExport bool SynchronisableVariable<const int>::checkEquality(uint8_t* mem); 177 182 template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned int>::returnSize(); 178 template <> _NetworkExport void SynchronisableVariable<const unsigned int>:: setAndIncrease(uint8_t*& mem);179 template <> _NetworkExport void SynchronisableVariable<const unsigned int>:: getAndIncrease(uint8_t*& mem);183 template <> _NetworkExport void SynchronisableVariable<const unsigned int>::loadAndIncrease(uint8_t*& mem); 184 template <> _NetworkExport void SynchronisableVariable<const unsigned int>::saveAndIncrease(uint8_t*& mem); 180 185 template <> _NetworkExport bool SynchronisableVariable<const unsigned int>::checkEquality(uint8_t* mem); 181 186 template <> _NetworkExport uint32_t SynchronisableVariable<const long>::returnSize(); 182 template <> _NetworkExport void SynchronisableVariable<const long>:: setAndIncrease(uint8_t*& mem);183 template <> _NetworkExport void SynchronisableVariable<const long>:: getAndIncrease(uint8_t*& mem);187 template <> _NetworkExport void SynchronisableVariable<const long>::loadAndIncrease(uint8_t*& mem); 188 template <> _NetworkExport void SynchronisableVariable<const long>::saveAndIncrease(uint8_t*& mem); 184 189 template <> _NetworkExport bool SynchronisableVariable<const long>::checkEquality(uint8_t* mem); 185 190 template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned long>::returnSize(); 186 template <> _NetworkExport void SynchronisableVariable<const unsigned long>:: setAndIncrease(uint8_t*& mem);187 template <> _NetworkExport void SynchronisableVariable<const unsigned long>:: getAndIncrease(uint8_t*& mem);191 template <> _NetworkExport void SynchronisableVariable<const unsigned long>::loadAndIncrease(uint8_t*& mem); 192 template <> _NetworkExport void SynchronisableVariable<const unsigned long>::saveAndIncrease(uint8_t*& mem); 188 193 template <> _NetworkExport bool SynchronisableVariable<const unsigned long>::checkEquality(uint8_t* mem); 189 194 template <> _NetworkExport uint32_t SynchronisableVariable<const long long>::returnSize(); 190 template <> _NetworkExport void SynchronisableVariable<const long long>:: setAndIncrease(uint8_t*& mem);191 template <> _NetworkExport void SynchronisableVariable<const long long>:: getAndIncrease(uint8_t*& mem);195 template <> _NetworkExport void SynchronisableVariable<const long long>::loadAndIncrease(uint8_t*& mem); 196 template <> _NetworkExport void SynchronisableVariable<const long long>::saveAndIncrease(uint8_t*& mem); 192 197 template <> _NetworkExport bool SynchronisableVariable<const long long>::checkEquality(uint8_t* mem); 193 198 template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned long long>::returnSize(); 194 template <> _NetworkExport void SynchronisableVariable<const unsigned long long>:: setAndIncrease(uint8_t*& mem);195 template <> _NetworkExport void SynchronisableVariable<const unsigned long long>:: getAndIncrease(uint8_t*& mem);199 template <> _NetworkExport void SynchronisableVariable<const unsigned long long>::loadAndIncrease(uint8_t*& mem); 200 template <> _NetworkExport void SynchronisableVariable<const unsigned long long>::saveAndIncrease(uint8_t*& mem); 196 201 template <> _NetworkExport bool SynchronisableVariable<const unsigned long long>::checkEquality(uint8_t* mem); 197 202 template <> _NetworkExport uint32_t SynchronisableVariable<const float>::returnSize(); 198 template <> _NetworkExport void SynchronisableVariable<const float>:: setAndIncrease(uint8_t*& mem);199 template <> _NetworkExport void SynchronisableVariable<const float>:: getAndIncrease(uint8_t*& mem);203 template <> _NetworkExport void SynchronisableVariable<const float>::loadAndIncrease(uint8_t*& mem); 204 template <> _NetworkExport void SynchronisableVariable<const float>::saveAndIncrease(uint8_t*& mem); 200 205 template <> _NetworkExport bool SynchronisableVariable<const float>::checkEquality(uint8_t* mem); 201 206 template <> _NetworkExport uint32_t SynchronisableVariable<const double>::returnSize(); 202 template <> _NetworkExport void SynchronisableVariable<const double>:: setAndIncrease(uint8_t*& mem);203 template <> _NetworkExport void SynchronisableVariable<const double>:: getAndIncrease(uint8_t*& mem);207 template <> _NetworkExport void SynchronisableVariable<const double>::loadAndIncrease(uint8_t*& mem); 208 template <> _NetworkExport void SynchronisableVariable<const double>::saveAndIncrease(uint8_t*& mem); 204 209 template <> _NetworkExport bool SynchronisableVariable<const double>::checkEquality(uint8_t* mem); 205 210 template <> _NetworkExport uint32_t SynchronisableVariable<const long double>::returnSize(); 206 template <> _NetworkExport void SynchronisableVariable<const long double>:: setAndIncrease(uint8_t*& mem);207 template <> _NetworkExport void SynchronisableVariable<const long double>:: getAndIncrease(uint8_t*& mem);211 template <> _NetworkExport void SynchronisableVariable<const long double>::loadAndIncrease(uint8_t*& mem); 212 template <> _NetworkExport void SynchronisableVariable<const long double>::saveAndIncrease(uint8_t*& mem); 208 213 template <> _NetworkExport bool SynchronisableVariable<const long double>::checkEquality(uint8_t* mem); 209 214 template <> _NetworkExport uint32_t SynchronisableVariable<const std::string>::returnSize(); 210 template <> _NetworkExport void SynchronisableVariable<const std::string>:: setAndIncrease(uint8_t*& mem);211 template <> _NetworkExport void SynchronisableVariable<const std::string>:: getAndIncrease(uint8_t*& mem);215 template <> _NetworkExport void SynchronisableVariable<const std::string>::loadAndIncrease(uint8_t*& mem); 216 template <> _NetworkExport void SynchronisableVariable<const std::string>::saveAndIncrease(uint8_t*& mem); 212 217 template <> _NetworkExport bool SynchronisableVariable<const std::string>::checkEquality(uint8_t* mem); 213 218 template <> _NetworkExport uint32_t SynchronisableVariable<const Degree>::returnSize(); 214 template <> _NetworkExport void SynchronisableVariable<const Degree>:: setAndIncrease(uint8_t*& mem);215 template <> _NetworkExport void SynchronisableVariable<const Degree>:: getAndIncrease(uint8_t*& mem);216 template <> _NetworkExport bool SynchronisableVariable<const Degree>::checkEquality(uint8_t* mem); 219 template <> _NetworkExport void SynchronisableVariable<const Degree>::loadAndIncrease(uint8_t*& mem); 220 template <> _NetworkExport void SynchronisableVariable<const Degree>::saveAndIncrease(uint8_t*& mem); 221 template <> _NetworkExport bool SynchronisableVariable<const Degree>::checkEquality(uint8_t* mem);*/ 217 222 218 223 … … 229 234 } 230 235 231 template <class T> voidSynchronisableVariableBidirectional<T>::getData(uint8_t*& mem, uint8_t mode)236 template <class T> uint32_t SynchronisableVariableBidirectional<T>::getData(uint8_t*& mem, uint8_t mode) 232 237 { 233 238 if ( this->mode_ == mode ) … … 243 248 mem += sizeof(this->varReference_); 244 249 // now write the content 245 SynchronisableVariable<T>::getAndIncrease(mem );250 saveAndIncrease( this->variable_, mem ); 246 251 // mem += SynchronisableVariable<T>::getSize(); 252 return SynchronisableVariableBidirectional::getSize(mode); 247 253 } 248 254 … … 260 266 else{ 261 267 // apply data 262 mem += sizeof(varReference_); 263 if ( SynchronisableVariableBidirectional<T>::checkEquality( mem )==true ) 268 if ( checkEquality( this->variable_, mem+sizeof(varReference_) )==true ) 264 269 { 265 mem += SynchronisableVariable<T>::getSize( mode );270 mem += getSize( mode ); 266 271 return; 267 272 } 268 273 else 269 274 { 275 mem += sizeof(varReference_); 270 276 memcpy((void*)&this->varBuffer_, &this->variable_, sizeof(T)); 271 277 if ( this->callback_ != 0 ) … … 285 291 this->varReference_ = *static_cast<uint8_t*>(mem); 286 292 mem += sizeof(varReference_); 287 if ( SynchronisableVariable<T>::checkEquality(mem ) == false )293 if ( checkEquality( this->variable_, mem ) == false ) 288 294 { 289 295 // value changed so remark for callback … … 294 300 } 295 301 // now write the data 296 SynchronisableVariable<T>::setAndIncrease(mem);302 loadAndIncrease(this->variable_, mem); 297 303 // now do a callback if neccessary 298 304 if ( callback ) … … 301 307 } 302 308 303 template <class T> uint32_t SynchronisableVariableBidirectional<T>::getSize(uint8_t mode)304 { 305 return SynchronisableVariable<T>::returnSize() + sizeof(varReference_);309 template <class T> inline uint32_t SynchronisableVariableBidirectional<T>::getSize(uint8_t mode) 310 { 311 return returnSize( this->variable_ ) + sizeof(varReference_); 306 312 } 307 313 … … 309 315 } 310 316 317 //#include "network/synchronisable/SynchronisableVariableSpecialisations.h" 311 318 312 319 #endif -
code/branches/netp3/src/orxonox/CameraManager.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/CameraManager.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/OrxonoxPrereqs.h
r2911 r2990 158 158 class SpawnPoint; 159 159 class TeamSpawnPoint; 160 class Test; 160 161 161 162 class Spectator; -
code/branches/netp3/src/orxonox/objects/Level.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/Level.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/Test.cc
r2662 r2990 31 31 #include "core/ConfigValueIncludes.h" 32 32 #include "core/ConsoleCommand.h" 33 #include "network/NetworkFunction.h" 33 34 #include "Test.h" 35 #include "util/MultiType.h" 34 36 35 37 namespace orxonox … … 41 43 SetConsoleCommand(Test, printV3, true).accessLevel(AccessLevel::User); 42 44 SetConsoleCommand(Test, printV4, true).accessLevel(AccessLevel::User); 45 SetConsoleCommand(Test, call, true).accessLevel(AccessLevel::User); 46 SetConsoleCommand(Test, call2, true).accessLevel(AccessLevel::User); 47 48 49 //void=* aaaaa = copyPtr<sizeof(&Test::printV1)>( &NETWORK_FUNCTION_POINTER, &Test::printV1 ); 50 //void* NETWORK_FUNCTION_TEST_B = memcpy(&NETWORK_FUNCTION_POINTER, &a, sizeof(a)); 51 // NetworkFunctionBase* NETWORK_FUNCTION_TEST_C = new NetworkFunctionStatic( createFunctor(&Test::printV1), "bla", NETWORK_FUNCTION_POINTER ); 52 53 registerStaticNetworkFunction( &Test::printV1 ); 54 registerMemberNetworkFunction( Test, checkU1 ); 55 registerMemberNetworkFunction( Test, printBlaBla ); 43 56 44 57 Test* Test::instance_ = 0; … … 73 86 74 87 75 76 77 88 void Test::registerVariables() 89 { 90 registerVariable ( u1, variableDirection::toclient, new NetworkCallback<Test> ( this, &Test::checkU1 )); 78 91 registerVariable ( u2, variableDirection::toserver, new NetworkCallback<Test> ( this, &Test::checkU2 )); 79 92 registerVariable ( u3, variableDirection::serverMaster, new NetworkCallback<Test> ( this, &Test::checkU3 ), true ); 80 93 registerVariable ( u4, variableDirection::clientMaster, new NetworkCallback<Test> ( this, &Test::checkU4 ), true ); 81 94 … … 84 97 registerVariable ( s3, variableDirection::serverMaster, new NetworkCallback<Test> ( this, &Test::checkS3 ), true ); 85 98 registerVariable ( s4, variableDirection::clientMaster, new NetworkCallback<Test> ( this, &Test::checkS4 ), true ); 86 } 87 99 } 100 101 void Test::call(unsigned int clientID) 102 { 103 callStaticNetworkFunction( &Test::printV1, clientID ); 104 callStaticNetworkFunction( &Test::printV1, clientID ); 105 } 106 107 void Test::call2(unsigned int clientID, std::string s1, std::string s2, std::string s3, std::string s4) 108 { 109 callMemberNetworkFunction( Test, printBlaBla, this->getObjectID(), clientID, s1, s2, s3, s4, s4 ); 110 } 111 112 void Test::tick(float dt) 113 { 114 // std::string str1 = "blub"; 115 // //MultiType mt1(std::string("blub")); 116 // MultiType mt1(str1); 117 // uint8_t* mem = new uint8_t[mt1.getNetworkSize()]; 118 // uint8_t* temp = mem; 119 // mt1.exportData( temp ); 120 // assert( temp-mem == mt1.getNetworkSize() ); 121 // MultiType mt2; 122 // temp = mem; 123 // mt2.importData( temp ); 124 // assert( temp-mem == mt1.getNetworkSize() ); 125 // COUT(0) << mt2 << endl; 126 if(!Core::isMaster()) 127 call2(0, "bal", "a", "n", "ce"); 128 // callMemberNetworkFunction( Test, checkU1, this->getObjectID(), 0 ); 129 } 130 131 void Test::printBlaBla(std::string s1, std::string s2, std::string s3, std::string s4, std::string s5) 132 { 133 COUT(0) << s1 << s2 << s3 << s4 << s5 << endl; 134 } 135 88 136 void Test::checkU1(){ COUT(1) << "U1 changed: " << u1 << std::endl; } 89 137 void Test::checkU2(){ COUT(1) << "U2 changed: " << u2 << std::endl; } -
code/branches/netp3/src/orxonox/objects/Test.h
r2662 r2990 33 33 #include "core/BaseObject.h" 34 34 #include "network/synchronisable/Synchronisable.h" 35 #include "Tickable.h" 35 36 36 37 … … 41 42 namespace orxonox 42 43 { 43 class _OrxonoxExport Test: public BaseObject, public Synchronisable 44 class _OrxonoxExport Test: public BaseObject, public Synchronisable, public Tickable 44 45 { 45 46 public: … … 49 50 void setConfigValues(); 50 51 void registerVariables(); 52 53 static void call(unsigned int clientID); 54 void call2(unsigned int clientID, std::string s1, std::string s2, std::string s3, std::string s4); 55 virtual void tick(float dt); 51 56 52 57 … … 75 80 static void printV3(){ instance_->checkU3(); } 76 81 static void printV4(){ instance_->checkU4(); } 82 83 void printBlaBla(std::string s1, std::string s2, std::string s3, std::string s4, std::string s5); 77 84 78 85 private: -
code/branches/netp3/src/orxonox/objects/collisionshapes
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/controllers/AIController.cc
r2896 r2990 101 101 void AIController::tick(float dt) 102 102 { 103 if (!this->isActive()) 104 return; 105 106 if (this->target_) 107 this->aimAtTarget(); 108 109 if (this->bHasTargetPosition_) 110 this->moveToTargetPosition(dt); 111 112 if (this->getControllableEntity() && this->bShooting_ && this->isCloseAtTarget(500) && this->isLookingAtTarget(Ogre::Math::PI / 20.0)) 113 this->getControllableEntity()->fire(WeaponMode::fire); 103 if(Core::isMaster()) 104 { 105 if (!this->isActive()) 106 return; 107 108 if (this->target_) 109 this->aimAtTarget(); 110 111 if (this->bHasTargetPosition_) 112 this->moveToTargetPosition(dt); 113 114 if (this->getControllableEntity() && this->bShooting_ && this->isCloseAtTarget(500) && this->isLookingAtTarget(Ogre::Math::PI / 20.0)) 115 this->getControllableEntity()->fire(WeaponMode::fire); 116 } 114 117 115 118 SUPER(AIController, tick, dt); -
code/branches/netp3/src/orxonox/objects/gametypes/TeamDeathmatch.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/gametypes/TeamDeathmatch.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/pickup/Usable.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/AddQuest.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/AddQuest.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/AddQuestHint.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/AddQuestHint.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/AddReward.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/AddReward.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/ChangeQuestStatus.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/ChangeQuestStatus.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/CompleteQuest.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/CompleteQuest.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/FailQuest.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/FailQuest.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/GlobalQuest.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/GlobalQuest.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/LocalQuest.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/LocalQuest.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/Quest.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/Quest.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/QuestDescription.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/QuestDescription.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/QuestEffect.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/QuestEffect.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/QuestHint.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/QuestHint.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/QuestItem.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/QuestItem.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/QuestManager.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/QuestManager.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/Rewardable.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/quest/Rewardable.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/weaponSystem/WeaponSystem.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/weaponSystem/WeaponSystem.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/worldentities/Backlight.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/worldentities/Backlight.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/worldentities/Camera.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/worldentities/Camera.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/worldentities/ControllableEntity.cc
r2973 r2990 66 66 this->mouseLookSpeed_ = 200; 67 67 68 this-> server_position_ = Vector3::ZERO;69 this->client_position_ = Vector3::ZERO;70 this-> server_linear_velocity_ = Vector3::ZERO;71 this->client_linear_velocity_ = Vector3::ZERO;72 this-> server_orientation_ = Quaternion::IDENTITY;73 this->client_orientation_ = Quaternion::IDENTITY;74 this-> server_angular_velocity_ = Vector3::ZERO;75 this->client_angular_velocity_ = Vector3::ZERO;68 this->common_position_ = Vector3::ZERO; 69 // this->client_position_ = Vector3::ZERO; 70 this->common_linear_velocity_ = Vector3::ZERO; 71 // this->client_linear_velocity_ = Vector3::ZERO; 72 this->common_orientation_ = Quaternion::IDENTITY; 73 // this->client_orientation_ = Quaternion::IDENTITY; 74 this->common_angular_velocity_ = Vector3::ZERO; 75 // this->client_angular_velocity_ = Vector3::ZERO; 76 76 77 77 … … 326 326 if (!this->isDynamic()) 327 327 { 328 if (GameMode::isMaster())329 {330 this-> server_position_ = this->getPosition();331 this-> server_orientation_ = this->getOrientation();332 this-> server_linear_velocity_ = this->getVelocity();333 this-> server_angular_velocity_ = this->getAngularVelocity();334 }335 else if (this->bHasLocalController_)336 {337 this->client_position_ = this->getPosition();338 this->client_orientation_ = this->getOrientation();339 this->client_linear_velocity_ = this->getVelocity();340 this->client_angular_velocity_ = this->getAngularVelocity();341 }328 // if (GameMode::isMaster()) 329 // { 330 this->common_position_ = this->getPosition(); 331 this->common_orientation_ = this->getOrientation(); 332 this->common_linear_velocity_ = this->getVelocity(); 333 this->common_angular_velocity_ = this->getAngularVelocity(); 334 // } 335 // else if (this->bHasLocalController_) 336 // { 337 // this->client_position_ = this->getPosition(); 338 // this->client_orientation_ = this->getOrientation(); 339 // this->client_linear_velocity_ = this->getVelocity(); 340 // this->client_angular_velocity_ = this->getAngularVelocity(); 341 // } 342 342 } 343 343 } … … 349 349 registerVariable(this->hudtemplate_, variableDirection::toclient); 350 350 351 registerVariable(this->server_position_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerPosition)); 352 registerVariable(this->server_linear_velocity_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerLinearVelocity)); 353 registerVariable(this->server_orientation_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerOrientation)); 354 registerVariable(this->server_angular_velocity_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerAngularVelocity)); 355 356 registerVariable(this->server_overwrite_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processOverwrite)); 357 registerVariable(this->client_overwrite_, variableDirection::toserver); 358 359 registerVariable(this->client_position_, variableDirection::toserver, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientPosition)); 360 registerVariable(this->client_linear_velocity_, variableDirection::toserver, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientLinearVelocity)); 361 registerVariable(this->client_orientation_, variableDirection::toserver, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientOrientation)); 362 registerVariable(this->client_angular_velocity_, variableDirection::toserver, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientAngularVelocity)); 351 // registerVariable(this->server_position_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerPosition)); 352 // registerVariable(this->server_linear_velocity_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerLinearVelocity)); 353 // registerVariable(this->server_orientation_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerOrientation)); 354 // registerVariable(this->server_angular_velocity_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerAngularVelocity)); 355 // 356 // registerVariable(this->server_overwrite_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processOverwrite)); 357 // registerVariable(this->client_overwrite_, variableDirection::toserver); 358 // 359 // registerVariable(this->client_position_, variableDirection::toserver, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientPosition)); 360 // registerVariable(this->client_linear_velocity_, variableDirection::toserver, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientLinearVelocity)); 361 // registerVariable(this->client_orientation_, variableDirection::toserver, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientOrientation)); 362 // registerVariable(this->client_angular_velocity_, variableDirection::toserver, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientAngularVelocity)); 363 364 registerVariable(this->common_position_, variableDirection::serverMaster, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerPosition), true); 365 registerVariable(this->common_linear_velocity_, variableDirection::serverMaster, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerLinearVelocity), true); 366 registerVariable(this->common_orientation_, variableDirection::serverMaster, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerOrientation), true); 367 registerVariable(this->common_angular_velocity_, variableDirection::serverMaster, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerAngularVelocity), true); 363 368 364 369 registerVariable(this->playerID_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::networkcallback_changedplayerID)); … … 368 373 { 369 374 if (!this->bHasLocalController_) 370 MobileEntity::setPosition(this-> server_position_);375 MobileEntity::setPosition(this->common_position_); 371 376 } 372 377 … … 374 379 { 375 380 if (!this->bHasLocalController_) 376 MobileEntity::setVelocity(this-> server_linear_velocity_);381 MobileEntity::setVelocity(this->common_linear_velocity_); 377 382 } 378 383 … … 380 385 { 381 386 if (!this->bHasLocalController_) 382 MobileEntity::setOrientation(this-> server_orientation_);387 MobileEntity::setOrientation(this->common_orientation_); 383 388 } 384 389 … … 386 391 { 387 392 if (!this->bHasLocalController_) 388 MobileEntity::setAngularVelocity(this-> server_angular_velocity_);393 MobileEntity::setAngularVelocity(this->common_angular_velocity_); 389 394 } 390 395 … … 393 398 if (this->bHasLocalController_) 394 399 { 395 this->setPosition(this->server_position_);396 this->setOrientation(this->server_orientation_);397 this->setVelocity(this->server_linear_velocity_);398 this->setAngularVelocity(this->server_angular_velocity_);399 400 this->client_overwrite_ = this->server_overwrite_;400 // this->setPosition(this->server_position_); 401 // this->setOrientation(this->server_orientation_); 402 // this->setVelocity(this->server_linear_velocity_); 403 // this->setAngularVelocity(this->server_angular_velocity_); 404 405 // this->client_overwrite_ = this->server_overwrite_; 401 406 } 402 407 } … … 406 411 if (this->server_overwrite_ == this->client_overwrite_) 407 412 { 408 MobileEntity::setPosition(this->client_position_);409 this->server_position_ = this->getPosition();413 // MobileEntity::setPosition(this->client_position_); 414 // this->server_position_ = this->getPosition(); 410 415 } 411 416 } … … 415 420 if (this->server_overwrite_ == this->client_overwrite_) 416 421 { 417 MobileEntity::setVelocity(this->client_linear_velocity_);418 this->server_linear_velocity_ = this->getVelocity();422 // MobileEntity::setVelocity(this->client_linear_velocity_); 423 // this->server_linear_velocity_ = this->getVelocity(); 419 424 } 420 425 } … … 424 429 if (this->server_overwrite_ == this->client_overwrite_) 425 430 { 426 MobileEntity::setOrientation(this->client_orientation_);427 this->server_orientation_ = this->getOrientation();431 // MobileEntity::setOrientation(this->client_orientation_); 432 // this->server_orientation_ = this->getOrientation(); 428 433 } 429 434 } … … 433 438 if (this->server_overwrite_ == this->client_overwrite_) 434 439 { 435 MobileEntity::setAngularVelocity(this->client_angular_velocity_);436 this->server_angular_velocity_ = this->getAngularVelocity();440 // MobileEntity::setAngularVelocity(this->client_angular_velocity_); 441 // this->server_angular_velocity_ = this->getAngularVelocity(); 437 442 } 438 443 } … … 440 445 void ControllableEntity::setPosition(const Vector3& position) 441 446 { 442 if (GameMode::isMaster())443 {447 // if (GameMode::isMaster()) 448 // { 444 449 MobileEntity::setPosition(position); 445 this-> server_position_ = this->getPosition();446 ++this->server_overwrite_;447 }448 else if (this->bHasLocalController_)449 {450 MobileEntity::setPosition(position);451 this->client_position_ = this->getPosition();452 }450 this->common_position_ = this->getPosition(); 451 // ++this->server_overwrite_; 452 // } 453 // else if (this->bHasLocalController_) 454 // { 455 // MobileEntity::setPosition(position); 456 // this->client_position_ = this->getPosition(); 457 // } 453 458 } 454 459 455 460 void ControllableEntity::setOrientation(const Quaternion& orientation) 456 461 { 457 if (GameMode::isMaster())458 {462 // if (GameMode::isMaster()) 463 // { 459 464 MobileEntity::setOrientation(orientation); 460 this-> server_orientation_ = this->getOrientation();461 ++this->server_overwrite_;462 }463 else if (this->bHasLocalController_)464 {465 MobileEntity::setOrientation(orientation);466 this->client_orientation_ = this->getOrientation();467 }465 this->common_orientation_ = this->getOrientation(); 466 // ++this->server_overwrite_; 467 // } 468 // else if (this->bHasLocalController_) 469 // { 470 // MobileEntity::setOrientation(orientation); 471 // this->client_orientation_ = this->getOrientation(); 472 // } 468 473 } 469 474 470 475 void ControllableEntity::setVelocity(const Vector3& velocity) 471 476 { 472 if (GameMode::isMaster())473 {477 // if (GameMode::isMaster()) 478 // { 474 479 MobileEntity::setVelocity(velocity); 475 this-> server_linear_velocity_ = this->getVelocity();476 ++this->server_overwrite_;477 }478 else if (this->bHasLocalController_)479 {480 MobileEntity::setVelocity(velocity);481 this->client_linear_velocity_ = this->getVelocity();482 }480 this->common_linear_velocity_ = this->getVelocity(); 481 // ++this->server_overwrite_; 482 // } 483 // else if (this->bHasLocalController_) 484 // { 485 // MobileEntity::setVelocity(velocity); 486 // this->client_linear_velocity_ = this->getVelocity(); 487 // } 483 488 } 484 489 485 490 void ControllableEntity::setAngularVelocity(const Vector3& velocity) 486 491 { 487 if (GameMode::isMaster())488 {492 // if (GameMode::isMaster()) 493 // { 489 494 MobileEntity::setAngularVelocity(velocity); 490 this-> server_angular_velocity_ = this->getAngularVelocity();491 ++this->server_overwrite_;492 }493 else if (this->bHasLocalController_)494 {495 MobileEntity::setAngularVelocity(velocity);496 this->client_angular_velocity_ = this->getAngularVelocity();497 }495 this->common_angular_velocity_ = this->getAngularVelocity(); 496 // ++this->server_overwrite_; 497 // } 498 // else if (this->bHasLocalController_) 499 // { 500 // MobileEntity::setAngularVelocity(velocity); 501 // this->client_angular_velocity_ = this->getAngularVelocity(); 502 // } 498 503 } 499 504 … … 501 506 { 502 507 MobileEntity::setWorldTransform(worldTrans); 503 if (GameMode::isMaster())504 {505 this-> server_position_ = this->getPosition();506 this-> server_orientation_ = this->getOrientation();507 this-> server_linear_velocity_ = this->getVelocity();508 this-> server_angular_velocity_ = this->getAngularVelocity();509 }510 else if (this->bHasLocalController_)511 {512 this->client_position_ = this->getPosition();513 this->client_orientation_ = this->getOrientation();514 this->client_linear_velocity_ = this->getVelocity();515 this->client_angular_velocity_ = this->getAngularVelocity();516 }508 // if (GameMode::isMaster()) 509 // { 510 this->common_position_ = this->getPosition(); 511 this->common_orientation_ = this->getOrientation(); 512 this->common_linear_velocity_ = this->getVelocity(); 513 this->common_angular_velocity_ = this->getAngularVelocity(); 514 // } 515 // else if (this->bHasLocalController_) 516 // { 517 // this->client_position_ = this->getPosition(); 518 // this->client_orientation_ = this->getOrientation(); 519 // this->client_linear_velocity_ = this->getVelocity(); 520 // this->client_angular_velocity_ = this->getAngularVelocity(); 521 // } 517 522 } 518 523 } -
code/branches/netp3/src/orxonox/objects/worldentities/ControllableEntity.h
r2973 r2990 164 164 bool bDestroyWhenPlayerLeft_; 165 165 166 Vector3 server_position_; 167 Vector3 client_position_; 168 Vector3 server_linear_velocity_; 169 Vector3 client_linear_velocity_; 170 Quaternion server_orientation_; 171 Quaternion client_orientation_; 172 Vector3 server_angular_velocity_; 173 Vector3 client_angular_velocity_; 166 // Vector3 server_position_; 167 Vector3 common_position_; 168 // Vector3 client_position_; 169 // Vector3 server_linear_velocity_; 170 // Vector3 client_linear_velocity_; 171 Vector3 common_linear_velocity_; 172 // Quaternion server_orientation_; 173 // Quaternion client_orientation_; 174 Quaternion common_orientation_; 175 // Vector3 server_angular_velocity_; 176 // Vector3 client_angular_velocity_; 177 Vector3 common_angular_velocity_; 174 178 175 179 PlayerInfo* player_; -
code/branches/netp3/src/orxonox/objects/worldentities/MobileEntity.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/worldentities/MobileEntity.h
- Property svn:mergeinfo changed
/code/branches/netp2/src/orxonox/objects/worldentities/MobileEntity.h (added) merged: 2975
r2911 r2990 61 61 { this->setAngularVelocity(Vector3(x, y, z)); } 62 62 inline const Vector3& getAngularVelocity() const 63 { return this-> linearAcceleration_; }63 { return this->angularVelocity_; } 64 64 65 65 void setAcceleration(const Vector3& acceleration); - Property svn:mergeinfo changed
-
code/branches/netp3/src/orxonox/objects/worldentities/ParticleSpawner.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/worldentities/ParticleSpawner.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/worldentities/StaticEntity.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/worldentities/StaticEntity.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/worldentities/pawns/Pawn.cc
r2904 r2990 39 39 #include "objects/worldentities/ParticleSpawner.h" 40 40 #include "objects/worldentities/ExplosionChunk.h" 41 #include "network/NetworkFunction.h" 41 42 42 43 namespace orxonox 43 44 { 44 45 CreateFactory(Pawn); 46 47 registerMemberNetworkFunction( Pawn, doFire ); 45 48 46 49 Pawn::Pawn(BaseObject* creator) : ControllableEntity(creator) … … 117 120 SUPER(Pawn, tick, dt); 118 121 119 if (this->weaponSystem_) 120 { 121 if (this->fire_ & WeaponMode::fire) 122 this->weaponSystem_->fire(WeaponMode::fire); 123 if (this->fire_ & WeaponMode::altFire) 124 this->weaponSystem_->fire(WeaponMode::altFire); 125 if (this->fire_ & WeaponMode::altFire2) 126 this->weaponSystem_->fire(WeaponMode::altFire2); 127 } 128 this->fire_ = this->firehack_; 129 this->firehack_ = 0x0; 130 131 if (this->health_ <= 0) 122 // if (this->weaponSystem_) 123 // { 124 // if (this->fire_ & WeaponMode::fire) 125 // this->weaponSystem_->fire(WeaponMode::fire); 126 // if (this->fire_ & WeaponMode::altFire) 127 // this->weaponSystem_->fire(WeaponMode::altFire); 128 // if (this->fire_ & WeaponMode::altFire2) 129 // this->weaponSystem_->fire(WeaponMode::altFire2); 130 // } 131 // this->fire_ = this->firehack_; 132 // this->firehack_ = 0x0; 133 134 if (Core::isMaster()) 135 if (this->health_ <= 0) 132 136 this->death(); 133 137 } … … 254 258 void Pawn::fire(WeaponMode::Enum fireMode) 255 259 { 256 this->firehack_ |= fireMode; 260 doFire(fireMode); 261 } 262 263 void Pawn::doFire(uint8_t fireMode) 264 { 265 if(Core::isMaster()) 266 { 267 if (this->weaponSystem_) 268 this->weaponSystem_->fire((WeaponMode::Enum)fireMode); 269 } 270 else 271 { 272 callMemberNetworkFunction( Pawn, doFire, this->getObjectID(), 0, ((uint8_t)fireMode)); 273 if (this->weaponSystem_) 274 this->weaponSystem_->fire((WeaponMode::Enum)fireMode); 275 } 257 276 } 258 277 -
code/branches/netp3/src/orxonox/objects/worldentities/pawns/Pawn.h
r2826 r2990 80 80 81 81 virtual void fire(WeaponMode::Enum fireMode); 82 virtual void doFire(uint8_t fireMode); 82 83 virtual void postSpawn(); 83 84 -
code/branches/netp3/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/worldentities/triggers/DistanceTrigger.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/worldentities/triggers/Trigger.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/orxonox/objects/worldentities/triggers/Trigger.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/tolua/all-5.0.lua
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/tolua/all-5.1.lua
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/util
- Property svn:mergeinfo changed
/code/branches/netp2/src/util (added) merged: 2861,2937,2949
- Property svn:mergeinfo changed
-
code/branches/netp3/src/util/Exception.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/util/Exception.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/util/MultiType.h
r2662 r2990 80 80 enum MT_Type 81 81 { 82 MT_null ,83 MT_char ,84 MT_uchar ,85 MT_short ,86 MT_ushort ,87 MT_int ,88 MT_uint ,89 MT_long ,90 MT_ulong ,91 MT_longlong ,92 MT_ulonglong ,93 MT_float ,94 MT_double ,95 MT_longdouble ,96 MT_bool ,97 MT_void ,98 MT_string ,99 MT_vector2 ,100 MT_vector3 ,101 MT_vector4 ,102 MT_colourvalue ,103 MT_quaternion ,104 MT_radian ,105 MT_degree 82 MT_null=0, 83 MT_char=1, 84 MT_uchar=2, 85 MT_short=3, 86 MT_ushort=4, 87 MT_int=5, 88 MT_uint=6, 89 MT_long=7, 90 MT_ulong=8, 91 MT_longlong=9, 92 MT_ulonglong=10, 93 MT_float=11, 94 MT_double=12, 95 MT_longdouble=13, 96 MT_bool=14, 97 MT_void=15, 98 MT_string=16, 99 MT_vector2=17, 100 MT_vector3=18, 101 MT_vector4=19, 102 MT_colourvalue=20, 103 MT_quaternion=21, 104 MT_radian=22, 105 MT_degree=23 106 106 }; 107 107 … … 223 223 224 224 virtual void toString(std::ostream& outstream) const = 0; 225 226 virtual void importData( uint8_t*& mem )=0; 227 virtual void exportData( uint8_t*& mem ) const=0; 228 virtual uint8_t getSize() const=0; 225 229 226 230 MT_Type type_; //!< The type of the current value … … 320 324 template <typename T> inline bool isType() const { return false; } // Only works for specialized values - see below 321 325 std::string getTypename() const; 326 327 /** @brief Saves the value of the MT to a bytestream (pointed at by mem) and increases mem pointer by size of MT */ 328 inline void exportData(uint8_t*& mem) const { assert(sizeof(MT_Type)<=8); *(uint8_t*)(mem) = this->getType(); mem+=sizeof(uint8_t); this->value_->exportData(mem); } 329 /** @brief Loads the value of the MT from a bytestream (pointed at by mem) and increases mem pointer by size of MT */ 330 inline void importData(uint8_t*& mem) { assert(sizeof(MT_Type)<=8); this->setType(static_cast<MT_Type>(*(uint8_t*)mem)); mem+=sizeof(uint8_t); this->value_->importData(mem); } 331 /** @brief Saves the value of the MT to a bytestream and increases pointer to bytestream by size of MT */ 332 inline uint8_t*& operator << (uint8_t*& mem) { importData(mem); return mem; } 333 /** @brief Loads the value of the MT to a bytestream and increases pointer to bytestream by size of MT */ 334 inline void operator >> (uint8_t*& mem) const { exportData(mem); } 335 inline uint32_t getNetworkSize() const { assert(this->value_); return this->value_->getSize() + sizeof(uint8_t); } 322 336 323 337 /** @brief Checks whether the value is a default one. */ -
code/branches/netp3/src/util/MultiTypeValue.h
r2171 r2990 40 40 #include "MathConvert.h" 41 41 #include "MultiType.h" 42 #include "Serialise.h" 43 #include <cassert> 42 44 43 45 namespace orxonox … … 147 149 /** @brief Puts the current value on the stream */ 148 150 inline void toString(std::ostream& outstream) const { outstream << this->value_; } 151 152 /** @brief loads data from the bytestream (mem) into the MT and increases the bytestream pointer by the size of the data */ 153 inline void importData( uint8_t*& mem ) { loadAndIncrease( /*(const T&)*/this->value_, mem ); } 154 /** @brief saves data from the MT into the bytestream (mem) and increases the bytestream pointer by the size of the data */ 155 inline void exportData( uint8_t*& mem ) const { saveAndIncrease( /*(const T&)*/this->value_, mem ); } 156 /** @brief returns the size of the data that would be saved by exportData */ 157 inline uint8_t getSize() const { return returnSize( this->value_ ); } 149 158 150 159 T value_; //!< The stored value 151 160 }; 161 162 // Import / Export specialisation 163 // ColourValue 164 template <> inline void MT_Value<ColourValue>::importData( uint8_t*& mem ) 165 { 166 loadAndIncrease( this->value_.r, mem ); 167 loadAndIncrease( this->value_.g, mem ); 168 loadAndIncrease( this->value_.b, mem ); 169 loadAndIncrease( this->value_.a, mem ); 170 } 171 template <> inline void MT_Value<ColourValue>::exportData( uint8_t*& mem ) const 172 { 173 saveAndIncrease( this->value_.r, mem ); 174 saveAndIncrease( this->value_.g, mem ); 175 saveAndIncrease( this->value_.b, mem ); 176 saveAndIncrease( this->value_.a, mem ); 177 } 178 template <> inline uint8_t MT_Value<ColourValue>::getSize() const 179 { 180 return 4*returnSize(this->value_.r); 181 } 182 // Ogre::Quaternion 183 template <> inline void MT_Value<Ogre::Quaternion>::importData( uint8_t*& mem ) 184 { 185 loadAndIncrease( this->value_.x, mem ); 186 loadAndIncrease( this->value_.y, mem ); 187 loadAndIncrease( this->value_.z, mem ); 188 loadAndIncrease( this->value_.w, mem ); 189 } 190 template <> inline void MT_Value<Ogre::Quaternion>::exportData( uint8_t*& mem ) const 191 { 192 saveAndIncrease( this->value_.x, mem ); 193 saveAndIncrease( this->value_.y, mem ); 194 saveAndIncrease( this->value_.z, mem ); 195 saveAndIncrease( this->value_.w, mem ); 196 }template <> inline uint8_t MT_Value<Ogre::Quaternion>::getSize() const 197 { 198 return 4*returnSize(this->value_.x); 199 } 200 // Ogre::Vector2 201 template <> inline void MT_Value<Ogre::Vector2>::importData( uint8_t*& mem ) 202 { 203 loadAndIncrease( this->value_.x, mem ); 204 loadAndIncrease( this->value_.y, mem ); 205 } 206 template <> inline void MT_Value<Ogre::Vector2>::exportData( uint8_t*& mem ) const 207 { 208 saveAndIncrease( this->value_.x, mem ); 209 saveAndIncrease( this->value_.y, mem ); 210 } 211 template <> inline uint8_t MT_Value<Ogre::Vector2>::getSize() const 212 { 213 return 2*returnSize(this->value_.x); 214 } 215 // Ogre::Vector3 216 template <> inline void MT_Value<Ogre::Vector3>::importData( uint8_t*& mem ) 217 { 218 loadAndIncrease( this->value_.x, mem ); 219 loadAndIncrease( this->value_.y, mem ); 220 loadAndIncrease( this->value_.z, mem ); 221 } 222 template <> inline void MT_Value<Ogre::Vector3>::exportData( uint8_t*& mem ) const 223 { 224 saveAndIncrease( this->value_.x, mem ); 225 saveAndIncrease( this->value_.y, mem ); 226 saveAndIncrease( this->value_.z, mem ); 227 } 228 template <> inline uint8_t MT_Value<Ogre::Vector3>::getSize() const 229 { 230 return 3*returnSize(this->value_.x); 231 } 232 // Ogre::Vector4 233 template <> inline void MT_Value<Ogre::Vector4>::importData( uint8_t*& mem ) 234 { 235 loadAndIncrease( this->value_.x, mem ); 236 loadAndIncrease( this->value_.y, mem ); 237 loadAndIncrease( this->value_.z, mem ); 238 loadAndIncrease( this->value_.w, mem ); 239 } 240 template <> inline void MT_Value<Ogre::Vector4>::exportData( uint8_t*& mem ) const 241 { 242 saveAndIncrease( this->value_.x, mem ); 243 saveAndIncrease( this->value_.y, mem ); 244 saveAndIncrease( this->value_.z, mem ); 245 saveAndIncrease( this->value_.w, mem ); 246 } 247 template <> inline uint8_t MT_Value<Ogre::Vector4>::getSize() const 248 { 249 return 4*returnSize(this->value_.x); 250 } 251 template <> inline void MT_Value<void*>::importData( uint8_t*& mem ) 252 { 253 assert(0); 254 } 255 template <> inline void MT_Value<void*>::exportData( uint8_t*& mem ) const 256 { 257 assert(0); 258 } 259 template <> inline uint8_t MT_Value<void*>::getSize() const 260 { 261 assert(0); return 0; 262 } 152 263 } 153 264 -
code/branches/netp3/src/util/SignalHandler.cc
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/branches/netp3/src/util/SignalHandler.h
- Property svn:mergeinfo changed (with no actual effect on merging)
Note: See TracChangeset
for help on using the changeset viewer.