Sirikata
|
#include <TransferMediator.hpp>
Classes | |
class | AggregateRequest |
class | PoolWorker |
struct | tagID |
struct | tagPriority |
Public Member Functions | |
TransferMediator () | |
~TransferMediator () | |
void | registerContext (Context *ctx) |
Register this Context with the TransferMediator. | |
template<typename TPoolType > | |
std::tr1::shared_ptr< TPoolType > | registerClient (const std::string &clientID) |
Used to register a client that has a pool of requests it needs serviced by the transfer mediator. | |
void | cleanup () |
Static Public Member Functions | |
static TransferMediator & | getSingleton () |
static void | destroy () |
Private Types | |
typedef multi_index_container < std::tr1::shared_ptr < AggregateRequest > , indexed_by< hashed_unique < tag< tagID >, const_mem_fun < AggregateRequest, const std::string &,&AggregateRequest::getIdentifier > >, ordered_non_unique< tag < tagPriority >, member < AggregateRequest, Priority,&AggregateRequest::mPriority > , std::greater< Priority > > > > | AggregateList |
typedef AggregateList::index < tagID >::type | AggregateListByID |
typedef AggregateList::index < tagPriority >::type | AggregateListByPriority |
typedef std::map< std::string, std::tr1::shared_ptr < PoolWorker > > | PoolType |
Private Member Functions | |
void | mediatorThread () |
void | execute_finished (std::tr1::shared_ptr< TransferRequest > req, std::string id) |
void | checkQueue () |
void | registerPool (TransferPoolPtr pool) |
void | commandListRequests (const Command::Command &cmd, Command::Commander *cmdr, Command::CommandID cmdid) |
Static Private Member Functions | |
static std::tr1::shared_ptr < TransferRequest > | getRequest (std::tr1::shared_ptr< TransferPool > pool) |
Private Attributes | |
boost::mutex | mAggMutex |
AggregateList | mAggregateList |
PoolType | mPools |
boost::shared_mutex | mPoolMutex |
bool | mCleanup |
uint32 | mNumOutstanding |
Thread * | mThread |
PriorityAggregationAlgorithm * | mAggregationAlgorithm |
Friends | |
class | PoolWorker |
typedef multi_index_container< std::tr1::shared_ptr<AggregateRequest>, indexed_by< hashed_unique<tag<tagID>, const_mem_fun<AggregateRequest,const std::string &,&AggregateRequest::getIdentifier> >, ordered_non_unique<tag<tagPriority>, member<AggregateRequest,Priority,&AggregateRequest::mPriority>, std::greater<Priority> > > > Sirikata::Transfer::TransferMediator::AggregateList [private] |
typedef AggregateList::index<tagID>::type Sirikata::Transfer::TransferMediator::AggregateListByID [private] |
typedef AggregateList::index<tagPriority>::type Sirikata::Transfer::TransferMediator::AggregateListByPriority [private] |
typedef std::map<std::string, std::tr1::shared_ptr<PoolWorker> > Sirikata::Transfer::TransferMediator::PoolType [private] |
Sirikata::Transfer::TransferMediator::TransferMediator | ( | ) |
Sirikata::Transfer::TransferMediator::~TransferMediator | ( | ) |
void Sirikata::Transfer::TransferMediator::checkQueue | ( | ) | [private] |
References Sirikata::Logging::detailed, and SILOG.
void Sirikata::Transfer::TransferMediator::cleanup | ( | ) |
void Sirikata::Transfer::TransferMediator::commandListRequests | ( | const Command::Command & | cmd, |
Command::Commander * | cmdr, | ||
Command::CommandID | cmdid | ||
) | [private] |
References Sirikata::Command::EmptyResult(), mAggMutex, mAggregateList, and Sirikata::Command::Commander::result().
Referenced by registerContext().
void Sirikata::Transfer::TransferMediator::destroy | ( | ) | [static] |
Reimplemented from Sirikata::AutoSingleton< TransferMediator >.
References destroy.
Referenced by main().
void Sirikata::Transfer::TransferMediator::execute_finished | ( | std::tr1::shared_ptr< TransferRequest > | req, |
std::string | id | ||
) | [private] |
References Sirikata::Logging::detailed, and SILOG.
static std::tr1::shared_ptr<TransferRequest> Sirikata::Transfer::TransferMediator::getRequest | ( | std::tr1::shared_ptr< TransferPool > | pool | ) | [inline, static, private] |
Referenced by Sirikata::Transfer::TransferMediator::PoolWorker::run().
TransferMediator & Sirikata::Transfer::TransferMediator::getSingleton | ( | ) | [static] |
Reimplemented from Sirikata::AutoSingleton< TransferMediator >.
Referenced by Sirikata::AggregateManager::AggregateManager(), Sirikata::BulletPhysicsService::BulletPhysicsService(), Sirikata::Graphics::OgreRenderer::initialize(), Sirikata::SDL::AudioSimulation::iStart(), Sirikata::JS::JSObjectScriptManager::JSObjectScriptManager(), main(), Sirikata::ObjectHost::ObjectHost(), and Sirikata::Transfer::TransferMediator::PoolWorker::run().
void Sirikata::Transfer::TransferMediator::mediatorThread | ( | ) | [private] |
Ewen and I weren't able to identify why the below call caused a deadlock on the shared space hosted on sns30 (could not reproduce on other machines). With the below line, in gdb, with bulletphysics on, and servermap-options set to port 6880, we'd get 4 calls to checkQueue, followed by no follow up calls. Not sure what to say.
std::tr1::shared_ptr<TPoolType> Sirikata::Transfer::TransferMediator::registerClient | ( | const std::string & | clientID | ) | [inline] |
Used to register a client that has a pool of requests it needs serviced by the transfer mediator.
clientID | Should be a string that uniquely identifies the client |
Referenced by Sirikata::AggregateManager::AggregateManager(), Sirikata::BulletPhysicsService::BulletPhysicsService(), Sirikata::Graphics::OgreRenderer::initialize(), Sirikata::SDL::AudioSimulation::iStart(), Sirikata::JS::JSObjectScriptManager::JSObjectScriptManager(), and Sirikata::ObjectHost::ObjectHost().
void Sirikata::Transfer::TransferMediator::registerContext | ( | Context * | ctx | ) |
Register this Context with the TransferMediator.
This is a workaround to the fact that TransferMediator is a Singleton. Currently this registers a few commands through the Commander interface
References Sirikata::Context::commander(), commandListRequests(), and Sirikata::Command::Commander::registerCommand().
Referenced by main().
void Sirikata::Transfer::TransferMediator::registerPool | ( | TransferPoolPtr | pool | ) | [private] |
friend class PoolWorker [friend] |
boost::mutex Sirikata::Transfer::TransferMediator::mAggMutex [private] |
Referenced by commandListRequests(), and Sirikata::Transfer::TransferMediator::PoolWorker::run().
Referenced by commandListRequests(), and Sirikata::Transfer::TransferMediator::PoolWorker::run().
bool Sirikata::Transfer::TransferMediator::mCleanup [private] |
uint32 Sirikata::Transfer::TransferMediator::mNumOutstanding [private] |
boost::shared_mutex Sirikata::Transfer::TransferMediator::mPoolMutex [private] |