Changeset 7767 in orxonox.OLD for branches/network/src/lib/network/network_stream.cc
- Timestamp:
- May 23, 2006, 11:40:29 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/network/src/lib/network/network_stream.cc
r7752 r7767 56 56 /* initialize the references */ 57 57 this->type = NET_CLIENT; 58 this->networkProtocol = new NetworkProtocol();59 this->connectionMonitor = new ConnectionMonitor();60 58 } 61 59 … … 68 66 this->peers[0].userId = 0; 69 67 this->peers[0].isServer = true; 70 this->networkProtocol = new NetworkProtocol(); 71 this->connectionMonitor = new ConnectionMonitor(); 68 this->peers[0].connectionMonitor = new ConnectionMonitor( 0 ); 72 69 } 73 70 … … 78 75 this->init(); 79 76 this->serverSocket = new UdpServerSocket(port); 80 this->networkProtocol = new NetworkProtocol();81 this->connectionMonitor = new ConnectionMonitor();82 77 this->bActive = true; 83 78 } … … 126 121 } 127 122 128 delete connectionMonitor;129 delete networkProtocol;130 123 } 131 124 … … 170 163 this->synchronizeables.erase(disconnectSynchro); 171 164 172 //TODO set timestamp 173 oldSynchronizeables[sync.getUniqueID()] = 0; 165 oldSynchronizeables[sync.getUniqueID()] = SDL_GetTicks(); 174 166 } 175 167 … … 202 194 } 203 195 196 cleanUpOldSyncList(); 204 197 handleHandshakes(); 205 198 handleUpstream(); … … 223 216 peers[clientId].socket = tempNetworkSocket; 224 217 peers[clientId].handshake = new Handshake(true, clientId, this->networkGameManager->getUniqueID(), MessageManager::getInstance()->getUniqueID() ); 218 peers[clientId].connectionMonitor = new ConnectionMonitor( clientId ); 225 219 peers[clientId].handshake->setUniqueID(clientId); 226 220 peers[clientId].userId = clientId; … … 237 231 peers[clientId].handshake = new Handshake(true, clientId, this->networkGameManager->getUniqueID(), MessageManager::getInstance()->getUniqueID()); 238 232 peers[clientId].handshake->setUniqueID(clientId); 233 peers[clientId].connectionMonitor = new ConnectionMonitor( clientId ); 239 234 peers[clientId].userId = clientId; 240 235 peers[clientId].isServer = false; … … 259 254 for ( PeerList::iterator it = peers.begin(); it != peers.end(); it++ ) 260 255 { 261 if ( it->second.socket && !it->second.socket->isOk() ) 256 //TODO check for timeout 257 if ( 258 (it->second.socket && !it->second.socket->isOk() ) || 259 it->second.connectionMonitor->hasTimedOut() 260 ) 262 261 { 263 262 PRINTF(0)("Client is gone: %d\n", it->second.userId); … … 424 423 425 424 assert( peer->second.socket->writePacket( buf, offset ) ); 426 peer->second.sentStateTicks[currentState] = SDL_GetTicks(); 425 426 peer->second.connectionMonitor->processUnzippedOutgoingPacket( buf, offset, currentState ); 427 427 428 NETPRINTF(n)("send packet: %d userId = %d\n", offset, peer->second.userId); 428 429 } … … 509 510 } 510 511 511 //TODO dont accept new object from all peers (probably only servers) 512 if ( !peers[peer->second.userId].isServer ) 513 { 514 offset += syncDataLength; 515 continue; 516 } 517 512 518 int leafClassId; 513 519 if ( INTSIZE > length - offset ) … … 564 570 } 565 571 566 if ( peer->second.sentStateTicks.find( ackedState ) != peer->second.sentStateTicks.end() ) 567 { 568 peer->second.ackDelay.push_back( SDL_GetTicks() - peer->second.sentStateTicks[ackedState] ); 569 } 570 571 while ( peer->second.sentStateTicks.begin()->first <= ackedState ) 572 peer->second.sentStateTicks.erase( peer->second.sentStateTicks.begin() ); 573 574 while ( peer->second.ackDelay.size() > 20 ) 575 peer->second.ackDelay.erase( peer->second.ackDelay.begin() ); 576 577 peer->second.ping = 0; 578 579 for ( std::list<int>::iterator it = peer->second.ackDelay.begin(); it != peer->second.ackDelay.end(); it++ ) 580 peer->second.ping += *it; 581 582 if ( peer->second.ackDelay.size() == 0 ) 583 peer->second.ping = -1; 584 else 585 peer->second.ping /= peer->second.ackDelay.size(); 586 587 NETPRINTF(n)("PING: user: %d ping: %d\n", peer->second.userId, peer->second.ping ); 572 peer->second.connectionMonitor->processUnzippedIncomingPacket( buf, offset, currentState, ackedState ); 588 573 589 574 peer->second.lastAckedState = ackedState; … … 600 585 * @todo create playable for new user 601 586 */ 602 #include "world_entities/space_ships/space_ship.h"603 587 void NetworkStream::handleNewClient( int userId ) 604 588 { … … 608 592 } 609 593 610 611 612 613 614 594 /** 595 * removes old items from oldSynchronizeables 596 */ 597 void NetworkStream::cleanUpOldSyncList( ) 598 { 599 int now = SDL_GetTicks(); 600 601 for ( std::map<int,int>::iterator it = oldSynchronizeables.begin(); it != oldSynchronizeables.end(); ) 602 { 603 if ( it->second < now - 10*1000 ) 604 { 605 std::map<int,int>::iterator delIt = it; 606 it++; 607 oldSynchronizeables.erase( delIt ); 608 continue; 609 } 610 it++; 611 } 612 } 613 614 615 616 617 618
Note: See TracChangeset
for help on using the changeset viewer.