Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 8096 in orxonox.OLD for branches/network/src/lib


Ignore:
Timestamp:
Jun 1, 2006, 6:36:55 PM (19 years ago)
Author:
rennerc
Message:

teamchoice works now

Location:
branches/network/src/lib/network
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/network/src/lib/network/message_manager.h

    r8068 r8096  
    2929{
    3030  TESTMESSAGEID = 1,
    31   MSGID_DELETESYNCHRONIZEABLE
     31  MSGID_DELETESYNCHRONIZEABLE,
     32  MSGID_PREFEREDTEAM
    3233};
    3334
  • branches/network/src/lib/network/network_game_manager.cc

    r8068 r8096  
    5959 
    6060  MessageManager::getInstance()->registerMessageHandler( MSGID_DELETESYNCHRONIZEABLE, delSynchronizeableHandler, NULL );
     61  MessageManager::getInstance()->registerMessageHandler( MSGID_PREFEREDTEAM, preferedTeamHandler, NULL );
    6162 
    6263  this->gameState = 0;
     
    8687 
    8788  int team = rules.getTeamForNewUser();
    88   ClassID playableClassId = rules.getPlayableClassId( team );
    89   std::string playableModel = rules.getPlayableModelFileName( team, playableClassId );
     89  ClassID playableClassId = rules.getPlayableClassId( userId, team );
     90  std::string playableModel = rules.getPlayableModelFileName( userId, team, playableClassId );
    9091 
    9192  BaseObject * bo = Factory::fabricate( playableClassId );
     
    180181
    181182
    182 
    183 
    184 
     183/**
     184 * handler for MSGID_PREFEREDTEAM message
     185 * @param messageId
     186 * @param data
     187 * @param dataLength
     188 * @param someData
     189 * @param userId
     190 * @return
     191 */
     192bool NetworkGameManager::preferedTeamHandler( MessageId messageId, byte * data, int dataLength, void * someData, int userId )
     193{
     194  assert( NetworkGameManager::getInstance()->isServer() );
     195 
     196  int teamId = 0;
     197  int len = Converter::byteArrayToInt( data, &teamId );
     198 
     199  if ( len != dataLength )
     200  {
     201    PRINTF(2)("Recieved DeleteSynchronizeable message with incorrect size (%d) from client %d!\n", dataLength, userId);
     202    return true;
     203  }
     204 
     205  NetworkGameManager::getInstance()->setPreferedTeam( userId, teamId );
     206}
     207
     208void NetworkGameManager::setPreferedTeam( int userId, int teamId )
     209{
     210  if ( !PlayerStats::getStats( userId ) )
     211    return;
     212 
     213  PlayerStats & stats = *(PlayerStats::getStats( userId ));
     214 
     215  stats.setPreferedTeamId( teamId );
     216 
     217}
     218
     219/**
     220 * set prefered team for this host
     221 * @param teamId
     222 */
     223void NetworkGameManager::prefereTeam( int teamId )
     224{
     225  if ( isServer() )
     226    setPreferedTeam( getHostID(), teamId );
     227  else
     228  {
     229    byte buf[INTSIZE];
     230   
     231    assert( Converter::intToByteArray( teamId, buf, INTSIZE) == INTSIZE );
     232   
     233    MessageManager::getInstance()->sendMessage( MSGID_PREFEREDTEAM, buf, INTSIZE, RT_USER, 0, MP_HIGHBANDWIDTH );
     234  }
     235}
     236
     237
     238
     239
  • branches/network/src/lib/network/network_game_manager.h

    r8068 r8096  
    5656   
    5757    void removeSynchronizeable( int uniqueId );
     58   
     59    void prefereTeam( int teamId );
    5860
    5961    inline void setGameState( int gameState ){ this->gameState = gameState; }
     
    6466   
    6567    static bool delSynchronizeableHandler( MessageId messageId, byte * data, int dataLength, void * someData, int userId );
     68    static bool preferedTeamHandler( MessageId messageId, byte * data, int dataLength, void * someData, int userId );
     69   
     70    void setPreferedTeam( int userId, int teamId );
    6671
    6772    static NetworkGameManager*    singletonRef;
  • branches/network/src/lib/network/player_stats.cc

    r8068 r8096  
    8686   
    8787    PRINTF(0)("uniqueID changed %d %d\n", userId, getHostID());
    88    
    89     if ( userId == getHostID() )
    90       State::getPlayer()->setPlayable( getPlayable() );
    9188  }
    9289}
     
    10097{
    10198  const std::list<BaseObject*> * list = ClassList::getList( CL_PLAYER_STATS );
     99 
     100  if ( !list )
     101    return NULL;
    102102 
    103103  for ( std::list<BaseObject*>::const_iterator it = list->begin(); it != list->end(); it++ )
     
    121121  const std::list<BaseObject*> * list = ClassList::getList( CL_PLAYABLE );
    122122 
     123  if ( !list )
     124  {
     125    this->playableUniqueId = uniqueId;
     126    return;
     127  }
     128 
    123129  this->playable = NULL;
    124130  for ( std::list<BaseObject*>::const_iterator it = list->begin(); it != list->end(); it++ )
     
    130136    }
    131137  }
     138 
     139  if ( /*this->playable &&*/ userId == getHostID() )
     140    State::getPlayer()->setPlayable( this->playable );
    132141 
    133142  this->playableUniqueId = uniqueId;
  • branches/network/src/lib/network/synchronizeable.cc

    r8068 r8096  
    108108
    109109  for ( SyncVarList::iterator it = syncVarList.begin(); it != syncVarList.end(); it++ )
     110  {
     111    //PRINTF(0)("SIZE = %d %s\n", (*it)->getSize(), (*it)->getName().c_str());
    110112    neededSize += (*it)->getSize();
     113  }
    111114
    112115  if ( !( neededSize <= maxLength ) )
     
    183186                    );
    184187   
    185     if ( ( hasPermission && (*it)->getPriority() >= priorityTH ) || sizeIter == stateFrom->sizeList.end() )
     188    if ( ( sizeIter != stateFrom->sizeList.end() && *sizeIter != (*it)->getSize() ) || ( hasPermission && (*it)->getPriority() >= priorityTH ) || sizeIter == stateFrom->sizeList.end() )
    186189    {
    187190      n = (*it)->writeToBuf( stateTo->data+i, stateTo->dataLength - i );
     
    209212  sentStates[userId].push_back( stateTo );
    210213 
    211   assert( i == neededSize );
     214  if ( i != neededSize )
     215  {
     216    PRINTF(0)("strange error: (%s) %d != %d\n", this->getClassName(), i, neededSize);
     217    assert(false);
     218  }
    212219
    213220  //write diff to data
  • branches/network/src/lib/network/synchronizeable_var/synchronizeable_string.cc

    r7954 r8096  
    4848 
    4949  assert( res > 0 );
     50  assert( res == vPtrIn->length()+INTSIZE );
    5051 
    5152  return res;
Note: See TracChangeset for help on using the changeset viewer.