Changeset 7801 for code/trunk/src/libraries/network/GamestateClient.cc
- Timestamp:
- Dec 22, 2010, 7:24:24 PM (13 years ago)
- Location:
- code/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
-
code/trunk/src/libraries/network/GamestateClient.cc
r7401 r7801 39 39 namespace orxonox 40 40 { 41 struct _NetworkExport GameStateItem{ 41 struct _NetworkExport GameStateItem 42 { 42 43 packet::Gamestate *state; 43 44 unsigned int id; 44 45 }; 45 46 46 GamestateClient::GamestateClient() { 47 GamestateClient::GamestateClient() 48 { 47 49 COUT(5) << "this: " << this << std::endl; 48 last _diff_=0;49 last _gamestate_=GAMESTATEID_INITIAL-1;50 lastAckedGamestateID_=GAMESTATEID_INITIAL-1; 51 lastProcessedGamestateID_=GAMESTATEID_INITIAL-1; 50 52 tempGamestate_=NULL; 51 53 } 52 54 53 GamestateClient::~GamestateClient() { 55 GamestateClient::~GamestateClient() 56 { 54 57 std::map<unsigned int, packet::Gamestate *>::iterator it; 55 58 for ( it = this->gamestateMap_.begin(); it != this->gamestateMap_.end(); ++it ) … … 59 62 } 60 63 61 bool GamestateClient::ack(unsigned int gamestateID, unsigned int clientID){ 64 bool GamestateClient::ackGamestate(unsigned int gamestateID, unsigned int clientID) 65 { 62 66 return true; 63 67 } 64 68 65 bool GamestateClient::add(packet::Gamestate *gs, unsigned int clientID){ 66 if(tempGamestate_!=NULL){ 69 bool GamestateClient::addGamestate(packet::Gamestate *gs, unsigned int clientID) 70 { 71 if(tempGamestate_!=NULL) 72 { 67 73 //delete the obsolete gamestate 68 74 if(tempGamestate_->getID()>gs->getID()) … … 74 80 } 75 81 76 bool GamestateClient::processGamestates(){ 82 bool GamestateClient::processGamestates() 83 { 77 84 if(tempGamestate_==NULL) 78 85 return false; … … 85 92 NetworkCallbackManager::callCallbacks(); 86 93 87 if (!processed){ 94 if (!processed) 95 { 96 assert(0); 88 97 sendAck(0); 89 98 return false; … … 92 101 tempGamestate_=NULL; 93 102 gamestateMap_[processed->getID()]=processed; 103 lastProcessedGamestateID_ = processed->getID(); 94 104 if(isDiffed) 95 last _diff_ = processed->getBaseID();105 lastAckedGamestateID_ = processed->getBaseID(); 96 106 id = processed->getID(); 97 107 sendAck(id); … … 105 115 * @return iterator pointing to the next object in the list 106 116 */ 107 void GamestateClient::removeObject(ObjectListIterator<Synchronisable> &it) { 117 void GamestateClient::removeObject(ObjectListIterator<Synchronisable> &it) 118 { 108 119 ObjectListIterator<Synchronisable> temp=it; 109 120 ++it; … … 111 122 } 112 123 113 packet::Gamestate *GamestateClient::getGamestate(){ 124 packet::Gamestate *GamestateClient::getGamestate() 125 { 114 126 packet::Gamestate *gs = new packet::Gamestate(); 115 if(!gs->collectData(0,0x2)){ 127 if(!gs->collectData(this->getLastProcessedGamestateID(NETWORK_PEER_ID_SERVER), 0x2)) 128 { 116 129 delete gs; 117 130 return 0; … … 120 133 } 121 134 122 void GamestateClient::cleanup(){ 135 void GamestateClient::cleanup() 136 { 123 137 std::map<unsigned int, packet::Gamestate*>::iterator temp, it = gamestateMap_.begin(); 124 while(it!=gamestateMap_.end()){ 125 if(it->first>=last_diff_) 138 while(it!=gamestateMap_.end()) 139 { 140 if(it->first>=lastAckedGamestateID_) 126 141 break; 127 142 // otherwise delete that stuff … … 133 148 } 134 149 135 void GamestateClient::printGamestateMap(){ 150 void GamestateClient::printGamestateMap() 151 { 136 152 std::map<unsigned int, packet::Gamestate*>::iterator it; 137 153 COUT(4) << "gamestates: "; 138 for(it=gamestateMap_.begin(); it!=gamestateMap_.end(); it++){ 154 for(it=gamestateMap_.begin(); it!=gamestateMap_.end(); it++) 155 { 139 156 COUT(4) << it->first << ':' << it->second << '|'; 140 157 } … … 143 160 } 144 161 145 bool GamestateClient::sendAck(unsigned int gamestateID){ 162 bool GamestateClient::sendAck(unsigned int gamestateID) 163 { 146 164 packet::Acknowledgement *ack = new packet::Acknowledgement(gamestateID, 0); 147 if(!ack->send()){ 165 if(!ack->send()) 166 { 148 167 COUT(3) << "could not ack gamestate: " << gamestateID << std::endl; 149 168 return false; 150 169 } 151 else{ 170 else 171 { 152 172 COUT(5) << "acked a gamestate: " << gamestateID << std::endl; 153 173 return true; … … 155 175 } 156 176 157 packet::Gamestate *GamestateClient::processGamestate(packet::Gamestate *gs){ 177 packet::Gamestate *GamestateClient::processGamestate(packet::Gamestate *gs) 178 { 158 179 if(gs->isCompressed()) 159 180 {
Note: See TracChangeset
for help on using the changeset viewer.