Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Sep 28, 2010, 9:48:32 PM (14 years ago)
Author:
scheusso
Message:

buffering incoming function calls for non-existing objects works now

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/trunk/src/libraries/network/FunctionCallManager.cc

    r6417 r7495  
    2929#include "FunctionCallManager.h"
    3030#include "packet/FunctionCalls.h"
     31#include "core/GameMode.h"
    3132
    3233namespace orxonox {
    3334
    34 std::map<uint32_t, packet::FunctionCalls*> FunctionCallManager::clientMap_;
     35std::map<uint32_t, packet::FunctionCalls*> FunctionCallManager::sClientMap_;
     36std::vector<FunctionCall> FunctionCallManager::sIncomingFunctionCallBuffer_;
    3537
    3638// Static calls
     
    3840void FunctionCallManager::addCallStatic(uint32_t functionID, uint32_t clientID)
    3941{
    40   if(clientMap_.find(clientID)==clientMap_.end())
     42  if(sClientMap_.find(clientID)==sClientMap_.end())
    4143  {
    42     FunctionCallManager::clientMap_[clientID] = new packet::FunctionCalls;
    43     FunctionCallManager::clientMap_[clientID]->setClientID(clientID);
     44    FunctionCallManager::sClientMap_[clientID] = new packet::FunctionCalls;
     45    FunctionCallManager::sClientMap_[clientID]->setClientID(clientID);
    4446  }
    45   FunctionCallManager::clientMap_[clientID]->addCallStatic(functionID);
     47  FunctionCallManager::sClientMap_[clientID]->addCallStatic(functionID);
    4648}
    4749void FunctionCallManager::addCallStatic(uint32_t functionID, uint32_t clientID, const MultiType& mt1)
    4850{
    49   if(clientMap_.find(clientID)==clientMap_.end())
     51  if(sClientMap_.find(clientID)==sClientMap_.end())
    5052  {
    51     FunctionCallManager::clientMap_[clientID] = new packet::FunctionCalls;
    52     FunctionCallManager::clientMap_[clientID]->setClientID(clientID);
     53    FunctionCallManager::sClientMap_[clientID] = new packet::FunctionCalls;
     54    FunctionCallManager::sClientMap_[clientID]->setClientID(clientID);
    5355  }
    54   FunctionCallManager:: clientMap_[clientID]->addCallStatic(functionID, &mt1);
     56  FunctionCallManager:: sClientMap_[clientID]->addCallStatic(functionID, &mt1);
    5557}
    5658void FunctionCallManager::addCallStatic(uint32_t functionID, uint32_t clientID, const MultiType& mt1, const MultiType& mt2)
    5759{
    58   if(clientMap_.find(clientID)==clientMap_.end())
     60  if(sClientMap_.find(clientID)==sClientMap_.end())
    5961  {
    60     FunctionCallManager::clientMap_[clientID] = new packet::FunctionCalls;
    61     FunctionCallManager::clientMap_[clientID]->setClientID(clientID);
     62    FunctionCallManager::sClientMap_[clientID] = new packet::FunctionCalls;
     63    FunctionCallManager::sClientMap_[clientID]->setClientID(clientID);
    6264  }
    63   FunctionCallManager:: clientMap_[clientID]->addCallStatic(functionID, &mt1, &mt2);
     65  FunctionCallManager:: sClientMap_[clientID]->addCallStatic(functionID, &mt1, &mt2);
    6466}
    6567void FunctionCallManager::addCallStatic(uint32_t functionID, uint32_t clientID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3)
    6668{
    67   if(clientMap_.find(clientID)==clientMap_.end())
     69  if(sClientMap_.find(clientID)==sClientMap_.end())
    6870  {
    69     FunctionCallManager::clientMap_[clientID] = new packet::FunctionCalls;
    70     FunctionCallManager::clientMap_[clientID]->setClientID(clientID);
     71    FunctionCallManager::sClientMap_[clientID] = new packet::FunctionCalls;
     72    FunctionCallManager::sClientMap_[clientID]->setClientID(clientID);
    7173  }
    72   FunctionCallManager:: clientMap_[clientID]->addCallStatic(functionID, &mt1, &mt2, &mt3);
     74  FunctionCallManager:: sClientMap_[clientID]->addCallStatic(functionID, &mt1, &mt2, &mt3);
    7375}
    7476void FunctionCallManager::addCallStatic(uint32_t functionID, uint32_t clientID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4)
    7577{
    76   if(clientMap_.find(clientID)==clientMap_.end())
     78  if(sClientMap_.find(clientID)==sClientMap_.end())
    7779  {
    78     FunctionCallManager::clientMap_[clientID] = new packet::FunctionCalls;
    79     FunctionCallManager::clientMap_[clientID]->setClientID(clientID);
     80    FunctionCallManager::sClientMap_[clientID] = new packet::FunctionCalls;
     81    FunctionCallManager::sClientMap_[clientID]->setClientID(clientID);
    8082  }
    81   FunctionCallManager:: clientMap_[clientID]->addCallStatic(functionID, &mt1, &mt2, &mt3, &mt4);
     83  FunctionCallManager:: sClientMap_[clientID]->addCallStatic(functionID, &mt1, &mt2, &mt3, &mt4);
    8284}
    8385void FunctionCallManager::addCallStatic(uint32_t functionID, uint32_t clientID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4, const MultiType& mt5)
    8486{
    85   if(clientMap_.find(clientID)==clientMap_.end())
     87  if(sClientMap_.find(clientID)==sClientMap_.end())
    8688  {
    87     FunctionCallManager::clientMap_[clientID] = new packet::FunctionCalls;
    88     FunctionCallManager::clientMap_[clientID]->setClientID(clientID);
     89    FunctionCallManager::sClientMap_[clientID] = new packet::FunctionCalls;
     90    FunctionCallManager::sClientMap_[clientID]->setClientID(clientID);
    8991  }
    90   FunctionCallManager:: clientMap_[clientID]->addCallStatic(functionID, &mt1, &mt2, &mt3, &mt4, &mt5);
     92  FunctionCallManager:: sClientMap_[clientID]->addCallStatic(functionID, &mt1, &mt2, &mt3, &mt4, &mt5);
    9193}
    9294
     
    9698void FunctionCallManager::addCallMember(uint32_t functionID, uint32_t objectID, uint32_t clientID)
    9799{
    98   if(clientMap_.find(clientID)==clientMap_.end())
     100  if(sClientMap_.find(clientID)==sClientMap_.end())
    99101  {
    100     FunctionCallManager::clientMap_[clientID] = new packet::FunctionCalls;
    101     FunctionCallManager::clientMap_[clientID]->setClientID(clientID);
     102    FunctionCallManager::sClientMap_[clientID] = new packet::FunctionCalls;
     103    FunctionCallManager::sClientMap_[clientID]->setClientID(clientID);
    102104  }
    103   FunctionCallManager::clientMap_[clientID]->addCallMember(functionID, objectID);
     105  FunctionCallManager::sClientMap_[clientID]->addCallMember(functionID, objectID);
    104106}
    105107void FunctionCallManager::addCallMember(uint32_t functionID, uint32_t objectID, uint32_t clientID, const MultiType& mt1)
    106108{
    107   if(clientMap_.find(clientID)==clientMap_.end())
     109  if(sClientMap_.find(clientID)==sClientMap_.end())
    108110  {
    109     FunctionCallManager::clientMap_[clientID] = new packet::FunctionCalls;
    110     FunctionCallManager::clientMap_[clientID]->setClientID(clientID);
     111    FunctionCallManager::sClientMap_[clientID] = new packet::FunctionCalls;
     112    FunctionCallManager::sClientMap_[clientID]->setClientID(clientID);
    111113  }
    112   FunctionCallManager::clientMap_[clientID]->addCallMember(functionID, objectID, &mt1);
     114  FunctionCallManager::sClientMap_[clientID]->addCallMember(functionID, objectID, &mt1);
    113115}
    114116void FunctionCallManager::addCallMember(uint32_t functionID, uint32_t objectID, uint32_t clientID, const MultiType& mt1, const MultiType& mt2)
    115117{
    116   if(clientMap_.find(clientID)==clientMap_.end())
     118  if(sClientMap_.find(clientID)==sClientMap_.end())
    117119  {
    118     FunctionCallManager::clientMap_[clientID] = new packet::FunctionCalls;
    119     FunctionCallManager::clientMap_[clientID]->setClientID(clientID);
     120    FunctionCallManager::sClientMap_[clientID] = new packet::FunctionCalls;
     121    FunctionCallManager::sClientMap_[clientID]->setClientID(clientID);
    120122  }
    121   FunctionCallManager::clientMap_[clientID]->addCallMember(functionID, objectID, &mt1, &mt2);
     123  FunctionCallManager::sClientMap_[clientID]->addCallMember(functionID, objectID, &mt1, &mt2);
    122124}
    123125void FunctionCallManager::addCallMember(uint32_t functionID, uint32_t objectID, uint32_t clientID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3)
    124126{
    125   if(clientMap_.find(clientID)==clientMap_.end())
     127  if(sClientMap_.find(clientID)==sClientMap_.end())
    126128  {
    127     FunctionCallManager::clientMap_[clientID] = new packet::FunctionCalls;
    128     FunctionCallManager::clientMap_[clientID]->setClientID(clientID);
     129    FunctionCallManager::sClientMap_[clientID] = new packet::FunctionCalls;
     130    FunctionCallManager::sClientMap_[clientID]->setClientID(clientID);
    129131  }
    130   FunctionCallManager::clientMap_[clientID]->addCallMember(functionID, objectID, &mt1, &mt2, &mt3);
     132  FunctionCallManager::sClientMap_[clientID]->addCallMember(functionID, objectID, &mt1, &mt2, &mt3);
    131133}
    132134void FunctionCallManager::addCallMember(uint32_t functionID, uint32_t objectID, uint32_t clientID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4)
    133135{
    134   if(clientMap_.find(clientID)==clientMap_.end())
     136  if(sClientMap_.find(clientID)==sClientMap_.end())
    135137  {
    136     FunctionCallManager::clientMap_[clientID] = new packet::FunctionCalls;
    137     FunctionCallManager::clientMap_[clientID]->setClientID(clientID);
     138    FunctionCallManager::sClientMap_[clientID] = new packet::FunctionCalls;
     139    FunctionCallManager::sClientMap_[clientID]->setClientID(clientID);
    138140  }
    139   FunctionCallManager::clientMap_[clientID]->addCallMember(functionID, objectID, &mt1, &mt2, &mt3, &mt4);
     141  FunctionCallManager::sClientMap_[clientID]->addCallMember(functionID, objectID, &mt1, &mt2, &mt3, &mt4);
    140142}
    141143void FunctionCallManager::addCallMember(uint32_t functionID, uint32_t objectID, uint32_t clientID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4, const MultiType& mt5)
    142144{
    143   if(clientMap_.find(clientID)==clientMap_.end())
     145  if(sClientMap_.find(clientID)==sClientMap_.end())
    144146  {
    145     FunctionCallManager::clientMap_[clientID] = new packet::FunctionCalls;
    146     FunctionCallManager::clientMap_[clientID]->setClientID(clientID);
     147    FunctionCallManager::sClientMap_[clientID] = new packet::FunctionCalls;
     148    FunctionCallManager::sClientMap_[clientID]->setClientID(clientID);
    147149  }
    148   FunctionCallManager::clientMap_[clientID]->addCallMember(functionID, objectID, &mt1, &mt2, &mt3, &mt4, &mt5);
     150  FunctionCallManager::sClientMap_[clientID]->addCallMember(functionID, objectID, &mt1, &mt2, &mt3, &mt4, &mt5);
    149151}
    150152
     
    154156{
    155157  std::map<uint32_t, packet::FunctionCalls*>::iterator it;
    156   for (it = FunctionCallManager::clientMap_.begin(); it != FunctionCallManager::clientMap_.end(); it++ )
     158  for (it = FunctionCallManager::sClientMap_.begin(); it != FunctionCallManager::sClientMap_.end(); ++it )
    157159  {
    158     assert(!FunctionCallManager::clientMap_.empty());
     160    assert(!FunctionCallManager::sClientMap_.empty());
    159161    it->second->send();
    160162  }
    161   FunctionCallManager::clientMap_.clear();
     163  FunctionCallManager::sClientMap_.clear();
     164}
     165
     166void FunctionCallManager::bufferIncomingFunctionCall(const orxonox::FunctionCall& fctCall)
     167{
     168  if( !GameMode::isMaster() )
     169    FunctionCallManager::sIncomingFunctionCallBuffer_.push_back( fctCall );
     170}
     171
     172void FunctionCallManager::processBufferedFunctionCalls()
     173{
     174  std::vector<FunctionCall>::iterator it = FunctionCallManager::sIncomingFunctionCallBuffer_.begin();
     175  while( it!=FunctionCallManager::sIncomingFunctionCallBuffer_.end() )
     176  {
     177    if( it->execute() )
     178      FunctionCallManager::sIncomingFunctionCallBuffer_.erase(it);
     179    else
     180      ++it;
     181  }
    162182}
    163183
Note: See TracChangeset for help on using the changeset viewer.