Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jul 20, 2006, 11:43:27 AM (19 years ago)
Author:
bensch
Message:

orxonox/proxy: merged the proxy.old back again, and it seems to work.

Merged with command
svn merge -r9247:HEAD https://svn.orxonox.net/orxonox/branches/proxy.old .

no conflicts

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/proxy/src/lib/network/synchronizeable.cc

    r9110 r9347  
    3838  this->setClassID(CL_SYNCHRONIZEABLE, "Synchronizeable");
    3939  this->owner = 0;
    40   this->setIsServer(SharedNetworkData::getInstance()->getHostID() == 0);
     40//   this->setIsServer(SharedNetworkData::getInstance()->getHostID() == 0);
    4141  this->uniqueID = NET_UID_UNASSIGNED;
    4242  this->networkStream = NULL;
    4343  this->bSynchronize = false;
    44  
     44
    4545  if( State::isOnline())
    4646  {
     
    5454  assert( syncVarList.size() == 0 );
    5555  mLeafClassId = this->registerVarId( new SynchronizeableInt( (int*)&this->getLeafClassID(), (int*)&this->getLeafClassID(), "leafClassId" ) );
    56    
     56
    5757  this->registerVar( new SynchronizeableInt( &this->owner, &this->owner, "owner" ) );
    5858  this->registerVar( new SynchronizeableString( &this->objectName, &this->objectName, "objectName" ) );
     
    6969  {
    7070    this->networkStream->disconnectSynchronizeable(*this);
    71  
    72     if ( this->isServer() && this->beSynchronized() && this->getUniqueID() > 0 && !this->isA( CL_MESSAGE_MANAGER ) )
     71
     72    if ( SharedNetworkData::getInstance()->isMasterServer() && this->beSynchronized() && this->getUniqueID() > 0 && !this->isA( CL_MESSAGE_MANAGER ) )
    7373      NetworkGameManager::getInstance()->removeSynchronizeable( this->getUniqueID() );
    7474  }
    75    
     75
    7676  for ( SyncVarList::iterator it = syncVarList.begin(); it != syncVarList.end(); it++ )
    7777  {
     
    7979  }
    8080  syncVarList.clear();
    81  
     81
    8282  for ( UserStateHistory::iterator it = recvStates.begin(); it != recvStates.end(); it++ )
    8383  {
     
    9393
    9494  }
    95  
     95
    9696  for ( UserStateHistory::iterator it = sentStates.begin(); it != sentStates.end(); it++ )
    9797  {
     
    105105      delete *it2;
    106106    }
    107 
    108   }
    109 }
    110 
    111 /**
    112  * Sets the server flag to a given value
    113  * @param isServer: the boolean value which the server flag is to set to
    114  */
    115 void Synchronizeable::setIsServer(bool isServer)
    116 {
    117   if( isServer )
    118     this->state = this->state | STATE_SERVER;
    119   else
    120     this->state = this->state & (~STATE_SERVER);
    121 }
    122 
    123 
    124 /**
    125  * Determines if the server flag is set
    126  * @return true, if the server flag is true, false else
    127  */
    128 bool Synchronizeable::isServer()
    129 {
    130   return (this->state & STATE_SERVER) >0;
     107  }
    131108}
    132109
     
    169146        (*it2)->data = NULL;
    170147      }
    171      
     148
    172149      delete *it2;
    173150    }
     
    181158  while ( it != sentStates[userId].end() && (*it)->stateId != fromStateId )
    182159    it++;
    183  
    184 //  if ( getLeafClassID() == CL_SPACE_SHIP )
    185 //  {
    186 //    PRINTF(0)("getStateDiff:SpaceShip from: %d stateId: %d\n", (it == sentStates[userId].end())?-1:fromStateId, stateId);
    187 //  }
    188160
    189161  if ( it == sentStates[userId].end() )
     
    196168
    197169    stateFrom = initialEntry;
    198    
     170
    199171    sentStates[userId].push_back( stateFrom );
    200172  }
     
    205177
    206178  sentStates[userId].push_back( stateTo );
    207  
     179
    208180  stateTo->stateId = stateId;
    209181  stateTo->dataLength = neededSize;
     
    214186  int i = 0;
    215187  int n;
    216  
     188
    217189  bool hasPermission;
    218190  bool sizeChanged = false;
     
    222194  {
    223195    hasPermission = (
    224             this->isServer() && (*it)->checkPermission( PERMISSION_SERVER ) ||
     196        SharedNetworkData::getInstance()->isMasterServer() && (*it)->checkPermission( PERMISSION_MASTER_SERVER ) ||
    225197        this->owner == SharedNetworkData::getInstance()->getHostID() && (*it)->checkPermission( PERMISSION_OWNER ) ||
    226             this->isServer() && this->owner != userId && (*it)->checkPermission( PERMISSION_OWNER ) ||
    227             (*it)->checkPermission( PERMISSION_ALL ) 
     198        SharedNetworkData::getInstance()->isMasterServer() && this->owner != userId && (*it)->checkPermission( PERMISSION_OWNER ) ||
     199            (*it)->checkPermission( PERMISSION_ALL )
    228200                    );
    229    
    230     if ( sizeIter == stateFrom->sizeList.end() || *sizeIter != (*it)->getSize() ) 
     201
     202    if ( sizeIter == stateFrom->sizeList.end() || *sizeIter != (*it)->getSize() )
    231203      sizeChanged = true;
    232    
     204
    233205    if ( ( hasPermission && (*it)->getPriority() >= priorityTH ) || sizeChanged )
    234206    {
     
    303275    it++;
    304276
    305  
     277
    306278//  if ( getLeafClassID() == CL_SPACE_SHIP )
    307279//  {
     
    318290
    319291    stateFrom = initialEntry;
    320    
     292
    321293    recvStates[userId].push_back( stateFrom );
    322294  }
    323295  else
    324296    stateFrom = (*it);
    325  
     297
    326298  //apply diff
    327299  for ( int i = 0; i<length; i++ )
     
    331303    else
    332304      stateTo->data[i] = data[i];
    333    
    334   }
    335  
     305
     306  }
     307
    336308  //add state to state history
    337309  recvStates[userId].push_back( stateTo );
    338  
     310
    339311  int i = 0;
    340312  int n = 0;
    341313  std::list<int> changes;
    342  
     314
    343315  for ( SyncVarList::iterator it = syncVarList.begin(); it != syncVarList.end(); it++ )
    344316  {
    345317    if (
    346         (*it)->checkPermission( PERMISSION_SERVER ) && networkStream->isUserServer( userId ) ||
     318        (*it)->checkPermission( PERMISSION_MASTER_SERVER ) && networkStream->isUserMasterServer( userId ) ||
    347319        (*it)->checkPermission( PERMISSION_OWNER ) && this->owner == userId ||
    348         networkStream->isUserServer( userId ) && this->owner != SharedNetworkData::getInstance()->getHostID() && (*it)->checkPermission( PERMISSION_OWNER ) ||
    349         (*it)->checkPermission( PERMISSION_ALL ) 
     320        networkStream->isUserMasterServer( userId ) && this->owner != SharedNetworkData::getInstance()->getHostID() && (*it)->checkPermission( PERMISSION_OWNER ) ||
     321        (*it)->checkPermission( PERMISSION_ALL )
    350322       )
    351323    {
     
    361333    else
    362334    {
    363 //      PRINTF(0)("DONT SET VAR BECAUSE OF PERMISSION: %s %d %d %d %d %d %d\n", (*it)->getName().c_str(), (*it)->checkPermission( PERMISSION_SERVER ), (*it)->checkPermission( PERMISSION_OWNER ), (*it)->checkPermission( PERMISSION_ALL ), networkStream->isUserServer( userId ), this->owner, userId );
     335//      PRINTF(0)("DONT SET VAR BECAUSE OF PERMISSION: %s %d %d %d %d %d %d\n", (*it)->getName().c_str(), (*it)->checkPermission( PERMISSION_MASTER_SERVER ), (*it)->checkPermission( PERMISSION_OWNER ), (*it)->checkPermission( PERMISSION_ALL ), networkStream->isUserServer( userId ), this->owner, userId );
    364336      n = (*it)->getSizeFromBuf( stateTo->data + i, stateTo->dataLength - i );
    365337      //NETPRINTF(0)("%s::setvar %s %d\n", getClassName(), (*it)->getName().c_str(), n);
     
    370342
    371343  this->varChangeHandler( changes );
    372  
     344
    373345  return i;
    374346}
     
    423395        (*it)->data = NULL;
    424396      }
    425    
     397
    426398      delete *it;
    427399    }
    428400    recvStates[userId].clear();
    429401  }
    430  
     402
    431403  if ( sentStates.size() > userId )
    432404  {
    433    
     405
    434406    for ( std::list<StateHistoryEntry*>::iterator it = sentStates[userId].begin(); it != sentStates[userId].end(); it++ )
    435407    {
     
    439411        (*it)->data = NULL;
    440412      }
    441    
     413
    442414      delete *it;
    443415    }
     
    448420/**
    449421 * this function is called after recieving a state.
    450  * @param userId 
    451  * @param stateId 
    452  * @param fromStateId 
     422 * @param userId
     423 * @param stateId
     424 * @param fromStateId
    453425 */
    454426void Synchronizeable::handleRecvState( int userId, int stateId, int fromStateId )
     
    457429  if ( recvStates.size() <= userId )
    458430    recvStates.resize( userId+1 );
    459  
     431
    460432  //remove old states
    461433  StateHistory::iterator it = recvStates[userId].begin();
     
    485457      StateHistory::iterator delIt = it;
    486458      it ++;
    487      
     459
    488460      if ( (*delIt)->data )
    489461      {
     
    493465      delete *delIt;
    494466      recvStates[userId].erase( delIt );
    495      
     467
    496468      continue;
    497469    }
    498470    it++;
    499471  }
    500  
     472
    501473  StateHistory::iterator fromState = recvStates[userId].end();
    502474  StateHistory::iterator toState = recvStates[userId].end();
    503  
     475
    504476  for ( it = recvStates[userId].begin(); it != recvStates[userId].end(); it++ )
    505477  {
     
    508480    if ( (*it)->stateId == fromStateId )
    509481      fromState = it;
    510    
     482
    511483    if ( fromState != recvStates[userId].end() && toState != recvStates[userId].end() )
    512484      break;
    513485  }
    514  
     486
    515487  // setStateDiff was not called and i know fromStateId
    516488  if ( fromState != recvStates[userId].end() && toState == recvStates[userId].end() )
    517489  {
    518490    StateHistoryEntry * entry = new StateHistoryEntry;
    519    
     491
    520492    entry->dataLength = (*fromState)->dataLength;
    521493    if ( entry->dataLength > 0 )
    522494    {
    523495      entry->data = new byte[entry->dataLength];
    524          
     496
    525497      assert( (*fromState)->data );
    526498      memcpy( entry->data, (*fromState)->data, entry->dataLength );
     
    528500    else
    529501      entry->data = NULL;
    530    
     502
    531503    entry->sizeList = (*fromState)->sizeList;
    532504    entry->stateId = stateId;
    533    
     505
    534506    recvStates[userId].push_back(entry);
    535507  }
     
    538510/**
    539511 * this function is called after sending a state
    540  * @param userId 
    541  * @param stateId 
    542  * @param fromStateId 
     512 * @param userId
     513 * @param stateId
     514 * @param fromStateId
    543515 */
    544516void Synchronizeable::handleSentState( int userId, int stateId, int fromStateId )
     
    557529      StateHistory::iterator delIt = it;
    558530      it ++;
    559      
     531
    560532      if ( (*delIt)->data )
    561533      {
     
    565537      delete *delIt;
    566538      sentStates[userId].erase( delIt );
    567      
     539
    568540      continue;
    569541    }
     
    571543  }
    572544
    573  
     545
    574546  StateHistory::iterator fromState = sentStates[userId].end();
    575547  StateHistory::iterator toState = sentStates[userId].end();
    576  
     548
    577549  for ( it = sentStates[userId].begin(); it != sentStates[userId].end(); it++ )
    578550  {
     
    581553    if ( (*it)->stateId == fromStateId )
    582554      fromState = it;
    583    
     555
    584556    if ( fromState != sentStates[userId].end() && toState != sentStates[userId].end() )
    585557      break;
    586558  }
    587559
    588  
     560
    589561  // getStateDiff was not called and i know fromStateId
    590562  if ( fromState != sentStates[userId].end() && toState == sentStates[userId].end() )
    591563  {
    592564    StateHistoryEntry * entry = new StateHistoryEntry;
    593    
     565
    594566    entry->dataLength = (*fromState)->dataLength;
    595567    if ( entry->dataLength > 0 )
    596568    {
    597569      entry->data = new byte[entry->dataLength];
    598      
     570
    599571      assert( (*fromState)->data );
    600572      memcpy( entry->data, (*fromState)->data, entry->dataLength );
     
    602574    else
    603575      entry->data = NULL;
    604    
     576
    605577    entry->sizeList = (*fromState)->sizeList;
    606578    entry->stateId = stateId;
    607    
     579
    608580    sentStates[userId].push_back(entry);
    609581  }
    610  
    611 }
    612 
    613 
    614 
     582
     583}
     584
     585
     586
Note: See TracChangeset for help on using the changeset viewer.