Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 23, 2006, 11:40:29 AM (18 years ago)
Author:
rennerc
Message:

hover registers sync vars. started with connection monitor

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/network/src/lib/network/network_stream.cc

    r7752 r7767  
    5656  /* initialize the references */
    5757  this->type = NET_CLIENT;
    58   this->networkProtocol = new NetworkProtocol();
    59   this->connectionMonitor = new ConnectionMonitor();
    6058}
    6159
     
    6866  this->peers[0].userId = 0;
    6967  this->peers[0].isServer = true;
    70   this->networkProtocol = new NetworkProtocol();
    71   this->connectionMonitor = new ConnectionMonitor();
     68  this->peers[0].connectionMonitor = new ConnectionMonitor( 0 );
    7269}
    7370
     
    7875  this->init();
    7976  this->serverSocket = new UdpServerSocket(port);
    80   this->networkProtocol = new NetworkProtocol();
    81   this->connectionMonitor = new ConnectionMonitor();
    8277  this->bActive = true;
    8378}
     
    126121  }
    127122
    128   delete connectionMonitor;
    129   delete networkProtocol;
    130123}
    131124
     
    170163    this->synchronizeables.erase(disconnectSynchro);
    171164 
    172   //TODO set timestamp
    173   oldSynchronizeables[sync.getUniqueID()] = 0;
     165  oldSynchronizeables[sync.getUniqueID()] = SDL_GetTicks();
    174166}
    175167
     
    202194  }
    203195
     196  cleanUpOldSyncList();
    204197  handleHandshakes();
    205198  handleUpstream();
     
    223216      peers[clientId].socket = tempNetworkSocket;
    224217      peers[clientId].handshake = new Handshake(true, clientId, this->networkGameManager->getUniqueID(), MessageManager::getInstance()->getUniqueID() );
     218      peers[clientId].connectionMonitor = new ConnectionMonitor( clientId );
    225219      peers[clientId].handshake->setUniqueID(clientId);
    226220      peers[clientId].userId = clientId;
     
    237231      peers[clientId].handshake = new Handshake(true, clientId, this->networkGameManager->getUniqueID(), MessageManager::getInstance()->getUniqueID());
    238232      peers[clientId].handshake->setUniqueID(clientId);
     233      peers[clientId].connectionMonitor = new ConnectionMonitor( clientId );
    239234      peers[clientId].userId = clientId;
    240235      peers[clientId].isServer = false;
     
    259254  for ( PeerList::iterator it = peers.begin(); it != peers.end(); it++ )
    260255  {
    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       )
    262261    {
    263262      PRINTF(0)("Client is gone: %d\n", it->second.userId);
     
    424423   
    425424    assert( peer->second.socket->writePacket( buf, offset ) );
    426     peer->second.sentStateTicks[currentState] = SDL_GetTicks();
     425   
     426    peer->second.connectionMonitor->processUnzippedOutgoingPacket( buf, offset, currentState );
     427   
    427428    NETPRINTF(n)("send packet: %d userId = %d\n", offset, peer->second.userId);
    428429  }
     
    509510          }
    510511
    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         
    512518          int leafClassId;
    513519          if ( INTSIZE > length - offset )
     
    564570      }
    565571     
    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 );
    588573   
    589574      peer->second.lastAckedState = ackedState;
     
    600585 * @todo create playable for new user
    601586 */
    602 #include "world_entities/space_ships/space_ship.h"
    603587void NetworkStream::handleNewClient( int userId )
    604588{
     
    608592}
    609593
    610 
    611 
    612 
    613 
    614 
     594/**
     595 * removes old items from oldSynchronizeables
     596 */
     597void 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.