Sirikata
Public Types | Public Member Functions | Public Attributes | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | Friends
Sirikata::JS::JSVisibleManager Class Reference

JSVisibleManager manages the data underlying visibles and presences in Emerson. More...

#include <JSVisibleManager.hpp>

Inheritance diagram for Sirikata::JS::JSVisibleManager:
Collaboration diagram for Sirikata::JS::JSVisibleManager:

List of all members.

Public Types

typedef boost::recursive_mutex RMutex

Public Member Functions

 JSVisibleManager (JSCtx *ctx)
virtual ~JSVisibleManager ()
JSVisibleStructcreateVisStruct (EmersonScript *parent, const SpaceObjectReference &whatsVisible, JSVisibleDataPtr addParams=JSVisibleDataPtr())
 Creates a new visible struct with sporef whatsVisible.
JSAggregateVisibleDataPtr getOrCreateVisible (const SpaceObjectReference &whatsVisible)
virtual void onCreateProxy (ProxyObjectPtr p)
virtual void onDestroyProxy (ProxyObjectPtr p)
virtual void updateLocation (ProxyObjectPtr proxy, const TimedMotionVector3f &newLocation, const TimedMotionQuaternion &newOrient, const AggregateBoundingInfo &newBounds, const SpaceObjectReference &sporef)
virtual void onSetMesh (ProxyObjectPtr proxy, Transfer::URI const &newMesh, const SpaceObjectReference &sporef)
virtual void onSetScale (ProxyObjectPtr proxy, float32 newScale, const SpaceObjectReference &sporef)
virtual void onSetPhysics (ProxyObjectPtr proxy, const String &newphy, const SpaceObjectReference &sporef)
virtual void onSetIsAggregate (ProxyObjectPtr proxy, bool isAggregate, const SpaceObjectReference &sporef)
bool isVisible (const SpaceObjectReference &sporef)
v8::Handle< v8::Value > isVisibleV8 (const SpaceObjectReference &sporef)

Public Attributes

RMutex vmMtx

Protected Member Functions

void iOnDestroyProxy (ProxyObjectPtr p)
void iUpdatedProxy (ProxyObjectPtr p)

Private Types

typedef
std::tr1::unordered_map
< SpaceObjectReference,
JSAggregateVisibleDataWPtr,
SpaceObjectReference::Hasher
SporefProxyMap
typedef SporefProxyMap::iterator SporefProxyMapIter
typedef
std::tr1::unordered_set
< ProxyObjectPtr,
ProxyObject::Hasher
TrackedObjectsMap

Private Member Functions

void iOnCreateProxy (ProxyObjectPtr p)
void clearVisibles ()
virtual void removeVisibleData (JSVisibleData *data)

Private Attributes

JSCtxmCtx
SporefProxyMap mProxies
TrackedObjectsMap mTrackedObjects

Friends

class EmersonScript

Detailed Description

JSVisibleManager manages the data underlying visibles and presences in Emerson.

For each visible, there isn't currently one canonical visible object in Emerson. Instead, we can create many of them on demand as we need them, pointing at the single, internal JSVisibleData. JSVisibleData is saved in the JSVisibleManager as a weak pointer so it can be cleaned up automatically when v8 cleans up all visibles pointing to the data. Visibles and presences maintain shared pointers to keep them alive while those objects need them, and their C++ data structures are cleaned up automatically when v8 collects the JavaScript objects.

JSVisibleDatas represent the current known state for a visible. Information could be coming from multiple ProxyObjects, or even none at all, e.g. if we found out about the visible via a message. JSVisibleData is created due to new ProxyObjects or due to createVisStruct calls (in that case containing empty information). Either of two things keep the JSVisibleData alive: living ProxyObjectPtrs (through reference count + shared_ptr) and existing v8 visible/presence objects (through shared_ptr to JSVisibleData). This setup allows us to trivially manage listening to ProxyObjects, always update the JSVisibleData as we get updates from ProxyObjects, and makes dealing with v8 garbage collection easy.


Member Typedef Documentation

typedef boost::recursive_mutex Sirikata::JS::JSVisibleManager::RMutex
typedef SporefProxyMap::iterator Sirikata::JS::JSVisibleManager::SporefProxyMapIter [private]

Constructor & Destructor Documentation

Sirikata::JS::JSVisibleManager::JSVisibleManager ( JSCtx ctx)
Sirikata::JS::JSVisibleManager::~JSVisibleManager ( ) [virtual]

References clearVisibles().


Member Function Documentation

void Sirikata::JS::JSVisibleManager::clearVisibles ( ) [private]
JSVisibleStruct * Sirikata::JS::JSVisibleManager::createVisStruct ( EmersonScript parent,
const SpaceObjectReference whatsVisible,
JSVisibleDataPtr  addParams = JSVisibleDataPtr() 
)

Creates a new visible struct with sporef whatsVisible.

First checks if already have visible with sporef whatsVisible in mProxies. If do, creates new visible struct from weak pointer stored there. If do not, then checks if hosted object has any proxy objects with given sporef, if not, then tries to load from addParams. If addParams is null, then just creates a blank proxy data object with whatsVisible as its sporef.

References getOrCreateVisible(), mCtx, and vmMtx.

Referenced by Sirikata::JS::EmersonScript::createVisibleWeakPersistent(), Sirikata::JS::EmersonScript::findVisible(), Sirikata::JS::EmersonScript::iNotifyProximate(), Sirikata::JS::EmersonScript::iNotifyProximateGone(), Sirikata::JS::EmersonScript::presToVis(), and Sirikata::JS::EmersonScript::requestReset().

JSAggregateVisibleDataPtr Sirikata::JS::JSVisibleManager::getOrCreateVisible ( const SpaceObjectReference whatsVisible)
void Sirikata::JS::JSVisibleManager::iOnCreateProxy ( ProxyObjectPtr  p) [private]
void Sirikata::JS::JSVisibleManager::iOnDestroyProxy ( ProxyObjectPtr  p) [protected]
bool Sirikata::JS::JSVisibleManager::isVisible ( const SpaceObjectReference sporef)
v8::Handle< v8::Value > Sirikata::JS::JSVisibleManager::isVisibleV8 ( const SpaceObjectReference sporef)

References isVisible(), and vmMtx.

void Sirikata::JS::JSVisibleManager::iUpdatedProxy ( ProxyObjectPtr  p) [protected]
void Sirikata::JS::JSVisibleManager::onCreateProxy ( ProxyObjectPtr  p) [virtual]
void Sirikata::JS::JSVisibleManager::onDestroyProxy ( ProxyObjectPtr  p) [virtual]
void Sirikata::JS::JSVisibleManager::onSetIsAggregate ( ProxyObjectPtr  proxy,
bool  isAggregate,
const SpaceObjectReference sporef 
) [virtual]
void Sirikata::JS::JSVisibleManager::onSetMesh ( ProxyObjectPtr  proxy,
Transfer::URI const &  newMesh,
const SpaceObjectReference sporef 
) [virtual]
void Sirikata::JS::JSVisibleManager::onSetPhysics ( ProxyObjectPtr  proxy,
const String &  newphy,
const SpaceObjectReference sporef 
) [virtual]
void Sirikata::JS::JSVisibleManager::onSetScale ( ProxyObjectPtr  proxy,
float32  newScale,
const SpaceObjectReference sporef 
) [virtual]
void Sirikata::JS::JSVisibleManager::removeVisibleData ( JSVisibleData data) [private, virtual]
void Sirikata::JS::JSVisibleManager::updateLocation ( ProxyObjectPtr  proxy,
const TimedMotionVector3f newLocation,
const TimedMotionQuaternion newOrient,
const AggregateBoundingInfo newBounds,
const SpaceObjectReference sporef 
) [virtual]

Friends And Related Function Documentation

friend class EmersonScript [friend]

Member Data Documentation


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