Sirikata
Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes
Sirikata::LibproxProximity Class Reference

#include <LibproxProximity.hpp>

Inheritance diagram for Sirikata::LibproxProximity:
Collaboration diagram for Sirikata::LibproxProximity:

List of all members.

Classes

struct  ProxQueryHandlerData

Public Types

typedef Prox::Query
< ObjectProxSimulationTraits > 
Query
typedef Prox::QueryEvent
< ObjectProxSimulationTraits > 
QueryEvent

Public Member Functions

 LibproxProximity (SpaceContext *ctx, LocationService *locservice, CoordinateSegmentation *cseg, SpaceNetwork *net, AggregateManager *aggmgr)
 ~LibproxProximity ()
virtual void start ()
 Start polling this service on this strand at the given maximum rate.
virtual void newSession (ObjectSession *session)
virtual void sessionClosed (ObjectSession *session)
virtual void addQuery (UUID obj, SolidAngle sa, uint32 max_results)
virtual void addQuery (UUID obj, const String &params)
virtual void removeQuery (UUID obj)
virtual void onPintoServerResult (const Sirikata::Protocol::Prox::ProximityUpdate &update)
virtual void onPintoServerLocUpdate (const LocUpdate &update)
virtual void localObjectRemoved (const UUID &uuid, bool agg)
virtual void localLocationUpdated (const UUID &uuid, bool agg, const TimedMotionVector3f &newval)
virtual void localBoundsUpdated (const UUID &uuid, bool agg, const AggregateBoundingInfo &newval)
virtual void replicaObjectRemoved (const UUID &uuid)
virtual void replicaLocationUpdated (const UUID &uuid, const TimedMotionVector3f &newval)
virtual void receiveMessage (Message *msg)
virtual std::string migrationClientTag ()
 The tag used to uniquely identify this component.
virtual std::string generateMigrationData (const UUID &obj, ServerID source_server, ServerID dest_server)
 Produce data for the migration of obj from source_server to dest_server.
virtual void receiveMigrationData (const UUID &obj, ServerID source_server, ServerID dest_server, const std::string &data)
 Receive data for the migration of obj from source_server to dest_server.
virtual void aggregateCreated (ProxAggregator *handler, const ObjectReference &objid)
virtual void aggregateChildAdded (ProxAggregator *handler, const ObjectReference &objid, const ObjectReference &child, const Vector3f &bnds_center, const float32 bnds_center_radius, const float32 max_obj_size)
virtual void aggregateChildRemoved (ProxAggregator *handler, const ObjectReference &objid, const ObjectReference &child, const Vector3f &bnds_center, const float32 bnds_center_radius, const float32 max_obj_size)
virtual void aggregateBoundsUpdated (ProxAggregator *handler, const ObjectReference &objid, const Vector3f &bnds_center, const float32 bnds_center_radius, const float32 max_obj_size)
virtual void aggregateDestroyed (ProxAggregator *handler, const ObjectReference &objid)
virtual void aggregateObserved (ProxAggregator *handler, const ObjectReference &objid, uint32 nobservers, uint32 nchildren)
void queryHasEvents (Query *query)

Private Types

typedef Prox::QueryHandler
< ObjectProxSimulationTraits > 
ProxQueryHandler
typedef Prox::Aggregator
< ObjectProxSimulationTraits > 
ProxAggregator
typedef
std::tr1::unordered_set
< ServerID > 
ServerSet
typedef std::set< UUIDObjectSet
typedef
std::tr1::unordered_map
< ServerID, Query * > 
ServerQueryMap
typedef
std::tr1::unordered_map< Query
*, ServerID > 
InvertedServerQueryMap
typedef
std::tr1::unordered_map< UUID,
Query *, UUID::Hasher
ObjectQueryMap
typedef
std::tr1::unordered_set< Query * > 
FirstIterationObjectSet
typedef
std::tr1::unordered_map< Query
*, UUID
InvertedObjectQueryMap
typedef std::tr1::shared_ptr
< ObjectSet
ObjectSetPtr
typedef
std::tr1::unordered_map
< ServerID, ObjectSetPtr
ServerQueryResultSet
typedef std::map< UUID,
SolidAngle
ObjectQueryAngleMap
typedef std::map< UUID, uint32 > ObjectQueryMaxCountMap
typedef
std::tr1::unordered_set
< ObjectReference,
ObjectReference::Hasher
ObjectIDSet
typedef
std::tr1::unordered_map
< ServerID, SeqNoPtr
ServerSeqNoInfoMap
typedef
std::tr1::unordered_map< UUID,
SeqNoPtr, UUID::Hasher
ObjectSeqNoInfoMap

Private Member Functions

void handleObjectProximityMessage (const UUID &objid, void *buffer, uint32 length)
void addAllServersForUpdate ()
void getServersForAggregateQueryUpdate (ServerSet *servers_out)
void addServerForAggregateQueryUpdate (ServerID sid)
void updateAggregateQuery ()
uint32 numServersQueried ()
virtual int32 objectQueries () const
virtual int32 serverQueries () const
void poll ()
 Override this method to specify the work to be done when polling.
void updateQuery (ServerID sid, const TimedMotionVector3f &loc, const BoundingSphere3f &bounds, const SolidAngle &sa, uint32 max_results)
void removeQuery (ServerID sid)
void updateQuery (UUID obj, const TimedMotionVector3f &loc, const BoundingSphere3f &bounds, SolidAngle sa, uint32 max_results)
void sendQueryRequests ()
void handleUpdateServerQuery (const ServerID &server, const TimedMotionVector3f &loc, const BoundingSphere3f &bounds, const SolidAngle &angle, uint32 max_results)
void handleRemoveServerQuery (const ServerID &server)
virtual void handleConnectedServer (ServerID server)
virtual void handleDisconnectedServer (ServerID server)
void handleUpdateObjectQuery (const UUID &object, const TimedMotionVector3f &loc, const BoundingSphere3f &bounds, const SolidAngle &angle, uint32 max_results, SeqNoPtr seqno)
void handleRemoveObjectQuery (const UUID &object, bool notify_main_thread)
void handleDisconnectedObject (const UUID &object)
void generateServerQueryEvents (Query *query)
void generateObjectQueryEvents (Query *query, bool do_first=false)
bool handlerShouldHandleObject (bool is_static_handler, bool is_global_handler, const ObjectReference &obj_id, bool local, bool aggregate, const TimedMotionVector3f &pos, const BoundingSphere3f &region, float maxSize)
void handleCheckObjectClassForHandlers (const ObjectReference &objid, bool is_static, ProxQueryHandlerData handlers[NUM_OBJECT_CLASSES])
virtual void trySwapHandlers (bool is_local, const ObjectReference &objid, bool is_static)
SeqNoPtr getOrCreateSeqNoInfo (const ServerID server_id)
void eraseSeqNoInfo (const ServerID server_id)
SeqNoPtr getSeqNoInfo (const UUID &obj_id)
void eraseSeqNoInfo (const UUID &obj_id)
void tickQueryHandler (ProxQueryHandlerData qh[NUM_OBJECT_CLASSES])
void rebuildHandlerType (ProxQueryHandlerData *handler, ObjectClass objtype)
void rebuildHandler (ObjectClass objtype)
void recomputeAggregateQueryBounds ()
virtual void commandProperties (const Command::Command &cmd, Command::Commander *cmdr, Command::CommandID cmdid)
virtual void commandListHandlers (const Command::Command &cmd, Command::Commander *cmdr, Command::CommandID cmdid)
bool parseHandlerName (const String &name, ProxQueryHandlerData **handlers_out, ObjectClass *class_out)
virtual void commandForceRebuild (const Command::Command &cmd, Command::Commander *cmdr, Command::CommandID cmdid)
virtual void commandListNodes (const Command::Command &cmd, Command::Commander *cmdr, Command::CommandID cmdid)
virtual void commandListQueriers (const Command::Command &cmd, Command::Commander *cmdr, Command::CommandID cmdid)

Private Attributes

boost::mutex mServerSetMutex
ServerSet mServersQueried
ServerSet mNeedServerQueryUpdate
float32 mDistanceQueryDistance
ObjectQueryAngleMap mObjectQueryAngles
ObjectQueryMaxCountMap mObjectQueryMaxCounts
AggregateBoundingInfo mLastAggregateQuerierBounds
SolidAngle mMinObjectQueryAngle
uint32 mMaxMaxCount
std::deque< Message * > mServerResultsToSend
std::deque
< Sirikata::Protocol::Object::ObjectMessage * > 
mObjectResultsToSend
ServerQueryMap mServerQueries [NUM_OBJECT_CLASSES]
InvertedServerQueryMap mInvertedServerQueries
ProxQueryHandlerData mServerQueryHandler [NUM_OBJECT_CLASSES]
bool mServerDistance
ServerQueryResultSet mServerQueryResults
PollerService mServerHandlerPoller
PollerService mServerQueryBoundsPoller
ObjectQueryMap mObjectQueries [NUM_OBJECT_CLASSES]
InvertedObjectQueryMap mInvertedObjectQueries
FirstIterationObjectSet mObjectQueriesFirstIteration
ProxQueryHandlerData mObjectQueryHandler [NUM_OBJECT_CLASSES]
bool mObjectDistance
PollerService mObjectHandlerPoller
PollerService mStaticRebuilderPoller
PollerService mDynamicRebuilderPoller
ServerSeqNoInfoMap mServerSeqNos
ObjectSeqNoInfoMap mObjectSeqNos
Sirikata::ThreadSafeQueue
< Message * > 
mServerResults
Sirikata::ThreadSafeQueue
< Sirikata::Protocol::Object::ObjectMessage * > 
mObjectResults

Member Typedef Documentation

typedef std::tr1::unordered_set<Query*> Sirikata::LibproxProximity::FirstIterationObjectSet [private]
typedef std::tr1::unordered_map<Query*, UUID> Sirikata::LibproxProximity::InvertedObjectQueryMap [private]
typedef std::tr1::unordered_map<Query*, ServerID> Sirikata::LibproxProximity::InvertedServerQueryMap [private]
typedef std::tr1::unordered_map<UUID, Query*, UUID::Hasher> Sirikata::LibproxProximity::ObjectQueryMap [private]
typedef std::map<UUID, uint32> Sirikata::LibproxProximity::ObjectQueryMaxCountMap [private]
typedef std::tr1::unordered_map<UUID, SeqNoPtr, UUID::Hasher> Sirikata::LibproxProximity::ObjectSeqNoInfoMap [private]
typedef std::set<UUID> Sirikata::LibproxProximity::ObjectSet [private]
typedef std::tr1::shared_ptr<ObjectSet> Sirikata::LibproxProximity::ObjectSetPtr [private]
typedef Prox::Aggregator<ObjectProxSimulationTraits> Sirikata::LibproxProximity::ProxAggregator [private]
typedef Prox::QueryHandler<ObjectProxSimulationTraits> Sirikata::LibproxProximity::ProxQueryHandler [private]
typedef Prox::Query<ObjectProxSimulationTraits> Sirikata::LibproxProximity::Query
typedef Prox::QueryEvent<ObjectProxSimulationTraits> Sirikata::LibproxProximity::QueryEvent

Reimplemented from Sirikata::LibproxProximityBase.

typedef std::tr1::unordered_map<ServerID, Query*> Sirikata::LibproxProximity::ServerQueryMap [private]
typedef std::tr1::unordered_map<ServerID, ObjectSetPtr> Sirikata::LibproxProximity::ServerQueryResultSet [private]
typedef std::tr1::unordered_map<ServerID, SeqNoPtr> Sirikata::LibproxProximity::ServerSeqNoInfoMap [private]
typedef std::tr1::unordered_set<ServerID> Sirikata::LibproxProximity::ServerSet [private]

Constructor & Destructor Documentation

Sirikata::LibproxProximity::LibproxProximity ( SpaceContext ctx,
LocationService locservice,
CoordinateSegmentation cseg,
SpaceNetwork net,
AggregateManager aggmgr 
)
Sirikata::LibproxProximity::~LibproxProximity ( )

Member Function Documentation

void Sirikata::LibproxProximity::addAllServersForUpdate ( ) [private]
void Sirikata::LibproxProximity::addQuery ( UUID  obj,
const String &  params 
) [virtual]
void Sirikata::LibproxProximity::addQuery ( UUID  obj,
SolidAngle  sa,
uint32  max_results 
) [virtual]
void Sirikata::LibproxProximity::addServerForAggregateQueryUpdate ( ServerID  sid) [private]
void Sirikata::LibproxProximity::aggregateBoundsUpdated ( ProxAggregator handler,
const ObjectReference objid,
const Vector3f &  bnds_center,
const float32  bnds_center_radius,
const float32  max_obj_size 
) [virtual]
void Sirikata::LibproxProximity::aggregateChildAdded ( ProxAggregator handler,
const ObjectReference objid,
const ObjectReference child,
const Vector3f &  bnds_center,
const float32  bnds_center_radius,
const float32  max_obj_size 
) [virtual]
void Sirikata::LibproxProximity::aggregateChildRemoved ( ProxAggregator handler,
const ObjectReference objid,
const ObjectReference child,
const Vector3f &  bnds_center,
const float32  bnds_center_radius,
const float32  max_obj_size 
) [virtual]
void Sirikata::LibproxProximity::aggregateCreated ( ProxAggregator handler,
const ObjectReference objid 
) [virtual]
void Sirikata::LibproxProximity::aggregateDestroyed ( ProxAggregator handler,
const ObjectReference objid 
) [virtual]
void Sirikata::LibproxProximity::aggregateObserved ( ProxAggregator handler,
const ObjectReference objid,
uint32  nobservers,
uint32  nchildren 
) [virtual]
void Sirikata::LibproxProximity::commandForceRebuild ( const Command::Command cmd,
Command::Commander cmdr,
Command::CommandID  cmdid 
) [private, virtual]
void Sirikata::LibproxProximity::commandListHandlers ( const Command::Command cmd,
Command::Commander cmdr,
Command::CommandID  cmdid 
) [private, virtual]
void Sirikata::LibproxProximity::commandListNodes ( const Command::Command cmd,
Command::Commander cmdr,
Command::CommandID  cmdid 
) [private, virtual]
void Sirikata::LibproxProximity::commandListQueriers ( const Command::Command cmd,
Command::Commander cmdr,
Command::CommandID  cmdid 
) [private, virtual]
void Sirikata::LibproxProximity::commandProperties ( const Command::Command cmd,
Command::Commander cmdr,
Command::CommandID  cmdid 
) [private, virtual]
void Sirikata::LibproxProximity::eraseSeqNoInfo ( const ServerID  server_id) [private]
void Sirikata::LibproxProximity::eraseSeqNoInfo ( const UUID obj_id) [private]

References mObjectSeqNos.

std::string Sirikata::LibproxProximity::generateMigrationData ( const UUID obj,
ServerID  source_server,
ServerID  dest_server 
) [virtual]

Produce data for the migration of obj from source_server to dest_server.

Implements Sirikata::Proximity.

References Sirikata::SolidAngle::asFloat(), mObjectQueryAngles, mObjectQueryMaxCounts, removeQuery(), and Sirikata::serializePBJMessage().

void Sirikata::LibproxProximity::generateObjectQueryEvents ( Query query,
bool  do_first = false 
) [private]

References Sirikata::CBRLocationServiceCache::bounds(), Sirikata::AggregateBoundingInfo::centerBoundsRadius, Sirikata::AggregateBoundingInfo::centerOffset, Sirikata::LibproxProximityBase::coalesceEvents(), Sirikata::createObjectMessage(), Sirikata::Logging::detailed, Sirikata::ObjectReference::getAsUUID(), Sirikata::GetOptionValue< uint32 >(), getSeqNoInfo(), Sirikata::LibproxProximityBase::handleAddObjectLocSubscription(), Sirikata::LibproxProximityBase::handleRemoveObjectLocSubscription(), Sirikata::SpaceContext::id(), Sirikata::CBRLocationServiceCache::isAggregate(), Sirikata::CBRLocationServiceCache::location(), Sirikata::Context::mainStrand, Sirikata::AggregateBoundingInfo::maxObjectRadius, Sirikata::Proximity::mContext, Sirikata::CBRLocationServiceCache::mesh(), mInvertedObjectQueries, Sirikata::LibproxProximityBase::mLocCache, mObjectQueriesFirstIteration, mObjectResults, Sirikata::UUID::null(), OBJECT_PORT_PROXIMITY, Sirikata::CBRLocationServiceCache::orientation(), Sirikata::CBRLocationServiceCache::physics(), Sirikata::TimedMotionQuaternion::position(), Sirikata::TimedMotionVector< MotionVectorType >::position(), Sirikata::Network::IOStrand::post(), PROX_MAX_PER_RESULT, PROXLOG, Sirikata::serializePBJMessage(), Sirikata::Context::simTime(), Sirikata::CBRLocationServiceCache::tracking(), Sirikata::TimedMotionQuaternion::updateTime(), Sirikata::TimedMotionVector< MotionVectorType >::updateTime(), Sirikata::TimedMotionQuaternion::velocity(), and Sirikata::TimedMotionVector< MotionVectorType >::velocity().

Referenced by queryHasEvents(), and tickQueryHandler().

void Sirikata::LibproxProximity::generateServerQueryEvents ( Query query) [private]
SeqNoPtr Sirikata::LibproxProximity::getOrCreateSeqNoInfo ( const ServerID  server_id) [private]
Parameters:
{uuid}obj_id The uuid of the object that we're sending proximity messages to.

Gets or creates sequence number information for the given querier.

References mServerSeqNos.

Referenced by generateServerQueryEvents().

SeqNoPtr Sirikata::LibproxProximity::getSeqNoInfo ( const UUID obj_id) [private]

References mObjectSeqNos.

Referenced by generateObjectQueryEvents().

void Sirikata::LibproxProximity::getServersForAggregateQueryUpdate ( ServerSet servers_out) [private]
void Sirikata::LibproxProximity::handleCheckObjectClassForHandlers ( const ObjectReference objid,
bool  is_static,
ProxQueryHandlerData  handlers[NUM_OBJECT_CLASSES] 
) [private]
void Sirikata::LibproxProximity::handleConnectedServer ( ServerID  server) [private, virtual]
void Sirikata::LibproxProximity::handleDisconnectedObject ( const UUID object) [private]

References handleRemoveObjectQuery().

Referenced by sessionClosed().

void Sirikata::LibproxProximity::handleDisconnectedServer ( ServerID  server) [private, virtual]
void Sirikata::LibproxProximity::handleObjectProximityMessage ( const UUID objid,
void *  buffer,
uint32  length 
) [private]
void Sirikata::LibproxProximity::handleRemoveObjectQuery ( const UUID object,
bool  notify_main_thread 
) [private]
void Sirikata::LibproxProximity::handleRemoveServerQuery ( const ServerID &  server) [private]
bool Sirikata::LibproxProximity::handlerShouldHandleObject ( bool  is_static_handler,
bool  is_global_handler,
const ObjectReference obj_id,
bool  local,
bool  aggregate,
const TimedMotionVector3f pos,
const BoundingSphere3f &  region,
float  maxSize 
) [private]
void Sirikata::LibproxProximity::handleUpdateObjectQuery ( const UUID object,
const TimedMotionVector3f loc,
const BoundingSphere3f &  bounds,
const SolidAngle angle,
uint32  max_results,
SeqNoPtr  seqno 
) [private]
void Sirikata::LibproxProximity::handleUpdateServerQuery ( const ServerID &  server,
const TimedMotionVector3f loc,
const BoundingSphere3f &  bounds,
const SolidAngle angle,
uint32  max_results 
) [private]
void Sirikata::LibproxProximity::localBoundsUpdated ( const UUID uuid,
bool  agg,
const AggregateBoundingInfo newval 
) [virtual]
void Sirikata::LibproxProximity::localLocationUpdated ( const UUID uuid,
bool  agg,
const TimedMotionVector3f newval 
) [virtual]
void Sirikata::LibproxProximity::localObjectRemoved ( const UUID uuid,
bool  agg 
) [virtual]
std::string Sirikata::LibproxProximity::migrationClientTag ( ) [virtual]

The tag used to uniquely identify this component.

Implements Sirikata::Proximity.

void Sirikata::LibproxProximity::newSession ( ObjectSession session) [virtual]
uint32 Sirikata::LibproxProximity::numServersQueried ( ) [private]

References mServerSetMutex, and mServersQueried.

Referenced by commandProperties().

int32 Sirikata::LibproxProximity::objectQueries ( ) const [private, virtual]
void Sirikata::LibproxProximity::onPintoServerLocUpdate ( const LocUpdate &  update) [virtual]
void Sirikata::LibproxProximity::onPintoServerResult ( const Sirikata::Protocol::Prox::ProximityUpdate &  update) [virtual]
bool Sirikata::LibproxProximity::parseHandlerName ( const String &  name,
ProxQueryHandlerData **  handlers_out,
ObjectClass class_out 
) [private]
void Sirikata::LibproxProximity::poll ( ) [private, virtual]
void Sirikata::LibproxProximity::queryHasEvents ( Query query)
void Sirikata::LibproxProximity::rebuildHandler ( ObjectClass  objtype) [private]
void Sirikata::LibproxProximity::rebuildHandlerType ( ProxQueryHandlerData handler,
ObjectClass  objtype 
) [private]
void Sirikata::LibproxProximity::receiveMessage ( Message msg) [virtual]
void Sirikata::LibproxProximity::receiveMigrationData ( const UUID obj,
ServerID  source_server,
ServerID  dest_server,
const std::string &  data 
) [virtual]

Receive data for the migration of obj from source_server to dest_server.

Implements Sirikata::Proximity.

References addQuery(), Sirikata::Logging::error, and LOG_INVALID_MESSAGE.

void Sirikata::LibproxProximity::recomputeAggregateQueryBounds ( ) [private]
void Sirikata::LibproxProximity::removeQuery ( ServerID  sid) [private]
void Sirikata::LibproxProximity::removeQuery ( UUID  obj) [virtual]
void Sirikata::LibproxProximity::replicaLocationUpdated ( const UUID uuid,
const TimedMotionVector3f newval 
) [virtual]
void Sirikata::LibproxProximity::replicaObjectRemoved ( const UUID uuid) [virtual]
void Sirikata::LibproxProximity::sendQueryRequests ( ) [private]
int32 Sirikata::LibproxProximity::serverQueries ( ) const [private, virtual]
void Sirikata::LibproxProximity::sessionClosed ( ObjectSession session) [virtual]
void Sirikata::LibproxProximity::start ( ) [virtual]
void Sirikata::LibproxProximity::tickQueryHandler ( ProxQueryHandlerData  qh[NUM_OBJECT_CLASSES]) [private]
void Sirikata::LibproxProximity::trySwapHandlers ( bool  is_local,
const ObjectReference objid,
bool  is_static 
) [private, virtual]
void Sirikata::LibproxProximity::updateAggregateQuery ( ) [private]
void Sirikata::LibproxProximity::updateQuery ( UUID  obj,
const TimedMotionVector3f loc,
const BoundingSphere3f &  bounds,
SolidAngle  sa,
uint32  max_results 
) [private]
void Sirikata::LibproxProximity::updateQuery ( ServerID  sid,
const TimedMotionVector3f loc,
const BoundingSphere3f &  bounds,
const SolidAngle sa,
uint32  max_results 
) [private]

Member Data Documentation

Referenced by start().

Referenced by start().

Sirikata::ThreadSafeQueue<Sirikata::Protocol::Object::ObjectMessage*> Sirikata::LibproxProximity::mObjectResults [private]
std::deque<Sirikata::Protocol::Object::ObjectMessage*> Sirikata::LibproxProximity::mObjectResultsToSend [private]

Referenced by commandProperties(), and poll().

Referenced by start().

Referenced by start().

Referenced by commandProperties(), and poll().

Referenced by start().


The documentation for this class was generated from the following files: