![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2009 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtVrfObjectDataStateProcessor.h,v $ $Revision: 1.1 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00012 00013 #pragma once 00014 00015 #include <vrfGuiCore/DtVrfObjectDataStateObjectAgent.hpp> 00016 00017 #include <vrvVrl/vrvVrl.h> 00018 //#include <vrvCore/DtSimDataProcessor.h> 00019 #include <vrvVrl/DtEntityExistenceListener.h> 00020 #include <vrvVrl/DtVrlinkEntityStateListener.h> 00021 00022 #include <vrvUtil/DtBalancedUpdater.h> 00023 #include <vrvUtil/DtSignalConnectionManager.h> 00024 #include <vrvCore/DtSimEntryObjectAgent.hpp> 00025 00026 namespace makVrv 00027 { 00028 class DtEntityStateListener; 00029 00030 namespace DT_PROTOCOL_NAMESPACE 00031 { 00032 class DtEntityExistenceListener; 00033 class DtStateListenerInterface; 00034 } 00035 } 00036 00037 namespace makVrf 00038 { 00039 namespace VRF_PROTOCOL_NAMESPACE 00040 { 00042 class DtVrfObjectDataStateProcessor : public makVrv::DtVirtualBaseClass 00043 { 00044 public: 00045 00047 static DtVrfObjectDataStateProcessor* findInstance(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim); 00048 00050 static void registerInstance(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim,DtVrfObjectDataStateProcessor*); 00051 00053 DtVrfObjectDataStateProcessor(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim, int sessionId, int messageVersion); 00054 00056 virtual ~DtVrfObjectDataStateProcessor(); 00057 00059 void postDrainInput(); 00060 00062 void setObjectUpdateRate(makVrv::DtUniqueID uniqueId, makVrv::DtSimEntryUpdater::UpdateRate rate); 00063 00065 void forceObjectUpdate(makVrv::DtUniqueID uniqueId); 00066 00068 void entityDiscovered(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEntityStateListener& listener); 00069 00071 void entityToBeDeleted(makVrv::DtEntityStateListener& listener); 00072 00074 virtual void createAndSendState(makVrv::DtEntityStateListener& listener, 00075 makVrv::DtSimStateObjectAgent& objectDriver); 00076 00077 boost::signal<void (makVrv::DtUniqueID, DtVrfObjectDataState&) > signal_stateUpdated; 00078 00079 protected: 00080 00082 static void postDrainInput(void* usr); 00083 void slot_postUpdateCallback(makVrv::DtEntityStateListener& listener); 00084 void setupState(const DtExtEntityStateRepository&, DtVrfObjectDataState&) const; 00085 00086 protected: 00087 00088 //A Listener and a driver which will be updated with it. 00089 class VrfObjectDataStateUpdater 00090 { 00091 public: 00092 00093 VrfObjectDataStateUpdater(makVrv::DtEntityStateListener& listener, 00094 DtVrfObjectDataStateObjectAgent& driver, DtVrfObjectDataStateProcessor&); 00095 00096 VrfObjectDataStateUpdater(const VrfObjectDataStateUpdater& orig); 00097 00098 VrfObjectDataStateUpdater& operator=(const VrfObjectDataStateUpdater& orig); 00099 00100 //Are the updaters equal 00101 bool operator==(const VrfObjectDataStateUpdater& orig) const; 00102 00104 void update(double timeT); 00105 00106 protected: 00107 00108 makVrv::DtEntityStateListener* myListener; 00109 DtVrfObjectDataStateObjectAgent* myObjectAgent; 00110 DtVrfObjectDataStateProcessor* myProcessor; 00111 }; 00112 00113 typedef std::vector<makVrv::DtUniqueID> EntityIdList; 00114 00115 struct EntitySimDataInstance 00116 { 00117 makVrv::DtEntityStateListener* myListener; 00118 DtVrfObjectDataStateObjectAgent* myAgent; 00119 makVrv::DtSimEntryUpdater::UpdateRate myRate; 00120 }; 00121 00122 typedef std::map<makVrv::DtUniqueID,EntitySimDataInstance > EntityAgentMap; 00123 00124 typedef makVrv::DtBalancedUpdater<VrfObjectDataStateUpdater> EntityUpdaterGroup; 00125 typedef std::map<makVrv::DtSimEntryUpdater::UpdateRate,EntityUpdaterGroup> 00126 EntityUpdateGroupMap; 00127 00128 protected: 00129 00130 makVrv::DtSignalConnectionManager myConnections; 00131 00132 makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& mySimulation; 00133 makVrv::DT_PROTOCOL_NAMESPACE::DtEntityExistenceListener& myListener; 00134 DtTimedSection myTimer; 00135 makVrv::DtSimEntryObjectAgent* mySimEntryAgent; 00136 00137 EntityAgentMap myEntityAgents; 00138 EntityUpdateGroupMap myRefreshRateGroups; 00139 EntityIdList myForceUpdateList; 00140 00141 std::map<makVrv::DtUniqueID, DtVrfObjectDataState> myCache; 00142 00143 int mySessionId; 00144 int myMessageVersion; 00145 }; 00146 } 00147 }