![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2012 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtExtendedStateDataProcessor.h,v $ $Revision: 1.2 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00014 00015 #pragma once 00016 00017 #include <vrfGuiCore/DtExtendedStateDataObjectAgent.hpp> 00018 00019 #include <vrvVrl/vrvVrl.h> 00020 00021 #include <vrvUtil/DtBalancedUpdater.h> 00022 #include <vrvUtil/DtSignalConnectionManager.h> 00023 #include <vrvCore/DtSimEntryObjectAgent.hpp> 00024 #include <vrvCore/DtSimDataProcessorInterface.h> 00025 00026 namespace makVrv 00027 { 00028 class DtStateListenerInterface; 00029 class DtEntityStateListener; 00030 class DtAggregateStateListener; 00031 class DtSimpleTypedDictionary; 00032 00033 namespace DT_PROTOCOL_NAMESPACE 00034 { 00035 class DtVrlinkEnvironmentalStateListenerInterface; 00036 } 00037 } 00038 00039 namespace makVrf 00040 { 00041 namespace VRF_PROTOCOL_NAMESPACE 00042 { 00043 00045 class DtExtendedStateDataProcessor : public makVrv::DtSimDataProcessorInterface 00046 { 00047 public: 00048 00050 static DtExtendedStateDataProcessor* findInstance(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim); 00051 00053 static void registerInstance(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim,DtExtendedStateDataProcessor*); 00054 00056 DtExtendedStateDataProcessor(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim); 00057 00059 virtual ~DtExtendedStateDataProcessor(); 00060 00062 void postDrainInput(); 00063 00065 void setObjectUpdateRate(makVrv::DtUniqueID uniqueId, makVrv::DtSimEntryUpdater::UpdateRate rate); 00066 00068 void forceObjectUpdate(makVrv::DtUniqueID uniqueId); 00069 00071 virtual void createAndSendState(makVrv::DtUniqueID id, makVrv::DtSimStateObjectAgent& objectDriver); 00072 00076 virtual DtSimpleTypedDictionary& extendedStateFor(makVrv::DtUniqueID id, bool forceUpdate = true); 00077 00079 virtual bool hasStateFor(makVrv::DtUniqueID) const; 00080 00082 virtual DtExtendedStateData stateFor(makVrv::DtUniqueID id) const; 00083 00084 boost::signal<void (makVrv::DtUniqueID, DtExtendedStateData&) > signal_stateUpdated; 00085 00086 protected: 00087 00089 static void postDrainInput(void* usr); 00090 00092 virtual void entityToBeDestroyed(makVrv::DtEntityStateListener&); 00093 virtual void aggregateToBeDestroyed(makVrv::DtAggregateStateListener&); 00094 virtual void environmentalToBeDestroyed(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEnvironmentalStateListenerInterface&); 00095 virtual void itemToBeDestroyed(makVrv::DtUniqueID); 00096 00097 protected: 00098 00099 //A Listener and a driver which will be updated with it. 00100 class ExtendedStateDataUpdater 00101 { 00102 public: 00103 00104 ExtendedStateDataUpdater(makVrv::DtUniqueID id, DtExtendedStateDataObjectAgent& driver, 00105 DtExtendedStateDataProcessor& processor); 00106 00107 ExtendedStateDataUpdater(const ExtendedStateDataUpdater& orig); 00108 00109 ExtendedStateDataUpdater& operator=(const ExtendedStateDataUpdater& orig); 00110 00111 //Are the updaters equal 00112 bool operator==(const ExtendedStateDataUpdater& orig) const; 00113 00115 void update(double timeT); 00116 00117 protected: 00118 makVrv::DtUniqueID myId; 00119 DtExtendedStateDataObjectAgent* myObjectAgent; 00120 DtExtendedStateDataProcessor* myProcessor; 00121 }; 00122 00123 typedef std::vector<makVrv::DtUniqueID> ExtendedStateDataIdList; 00124 00125 struct ExtendedStateDataInstance 00126 { 00127 makVrv::DtUniqueID myId; 00128 DtExtendedStateDataObjectAgent* myAgent; 00129 makVrv::DtSimEntryUpdater::UpdateRate myRate; 00130 DtExtendedStateData myStateData; 00131 }; 00132 00133 typedef std::map<makVrv::DtUniqueID,ExtendedStateDataInstance > ExtendedStateDataAgentMap; 00134 00135 typedef makVrv::DtBalancedUpdater<ExtendedStateDataUpdater> ExtededStateDataUpdaterGroup; 00136 typedef std::map<makVrv::DtSimEntryUpdater::UpdateRate,ExtededStateDataUpdaterGroup> 00137 ExtendedStateDataUpdateGroupMap; 00138 00139 protected: 00140 00141 makVrv::DtSignalConnectionManager myConnections; 00142 00143 makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& mySimulation; 00144 DtTimedSection myTimer; 00145 makVrv::DtSimEntryObjectAgent* mySimEntryAgent; 00146 00147 ExtendedStateDataAgentMap myExtendedStateDataAgents; 00148 ExtendedStateDataUpdateGroupMap myRefreshRateGroups; 00149 ExtendedStateDataIdList myForceUpdateList; 00150 }; 00151 } 00152 }