![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2009 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtVrlinkEnvironmentSimDataProcessor.h,v $ $Revision: 1.2 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00012 00013 #pragma once 00014 00015 #include <vrfVrlSharedSource/vrfProtocol.h> 00016 #include <vrfGuiCore/DtEnvironmentState.h> 00017 00018 #include <vrvCore/DtSimEntryUpdater.h> 00019 #include <vrvCore/DtSimDataProcessorInterface.h> 00020 00021 #include <vrvUtil/DtBalancedUpdater.h> 00022 #include <vrvUtil/DtSignalConnectionManager.h> 00023 00024 namespace makVrv 00025 { 00026 class DtSimEntryObjectAgent; 00027 00028 namespace DT_PROTOCOL_NAMESPACE 00029 { 00030 class DtVrlinkConnection; 00031 class DtVrlinkEnvironmentalStateListenerInterface; 00032 class DtEnvironmentalExistenceListener; 00033 } 00034 } 00035 00036 namespace makVrf 00037 { 00038 class DtEnvironmentStateObjectAgent; 00039 00040 namespace VRF_PROTOCOL_NAMESPACE 00041 { 00043 class VRF_PROTOCOL_EXPORT DtEnvironmentSimDataProcessor : public makVrv::DtSimDataProcessorInterface 00044 { 00045 public: 00046 00048 DtEnvironmentSimDataProcessor(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim); 00049 00051 virtual ~DtEnvironmentSimDataProcessor(); 00052 00054 void postDrainInput(); 00055 00057 void setObjectUpdateRate(makVrv::DtUniqueID uniqueId, makVrv::DtSimEntryUpdater::UpdateRate rate); 00058 00060 void forceObjectUpdate(makVrv::DtUniqueID uniqueId); 00061 00063 void environmentDiscovered(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEnvironmentalStateListenerInterface& listener); 00064 00066 void environmentToBeDeleted(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEnvironmentalStateListenerInterface& listener); 00067 00069 virtual void createAndSendState(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEnvironmentalStateListenerInterface& listener, 00070 DtEnvironmentStateObjectAgent& objectDriver); 00071 virtual void setState(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEnvironmentalStateListenerInterface& listener, 00072 DtVrlinkSimulatedEnvironmentProcess& state); 00073 virtual void setupPoints(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEnvironmentalStateListenerInterface& listener, 00074 DtVrlinkSimulatedEnvironmentProcess& state); 00075 00076 protected: 00077 00078 static void postDrainInput(void* usr); 00079 00080 virtual void slot_postUpdateCallback(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEnvironmentalStateListenerInterface& listener); 00081 00082 protected: 00083 00084 //A Listener and a driver which will be updated with it. 00085 class EnvironmentStateUpdater 00086 { 00087 public: 00088 00089 EnvironmentStateUpdater(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEnvironmentalStateListenerInterface& listener, 00090 DtEnvironmentStateObjectAgent& driver, DtEnvironmentSimDataProcessor& processor); 00091 00092 EnvironmentStateUpdater(const EnvironmentStateUpdater& orig); 00093 00094 EnvironmentStateUpdater& operator=(const EnvironmentStateUpdater& orig); 00095 00096 //Are the updaters equal 00097 bool operator==(const EnvironmentStateUpdater& orig) const; 00098 00100 void update(double timeT); 00101 00102 protected: 00103 00104 makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEnvironmentalStateListenerInterface* myListener; 00105 DtEnvironmentStateObjectAgent* myObjectAgent; 00106 DtEnvironmentSimDataProcessor* myProcessor; 00107 }; 00108 00109 typedef std::vector<makVrv::DtUniqueID> EnvironmentIdList; 00110 00111 struct EnvironmentSimDataInstance 00112 { 00113 makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEnvironmentalStateListenerInterface* myListener; 00114 DtEnvironmentStateObjectAgent* myAgent; 00115 makVrv::DtSimEntryUpdater::UpdateRate myRate; 00116 }; 00117 00118 typedef std::map<makVrv::DtUniqueID,EnvironmentSimDataInstance > EnvironmentAgentMap; 00119 00120 typedef makVrv::DtBalancedUpdater<EnvironmentStateUpdater> EnvironmentUpdaterGroup; 00121 typedef std::map<makVrv::DtSimEntryUpdater::UpdateRate,EnvironmentUpdaterGroup> 00122 EnvironmentUpdateGroupMap; 00123 00124 protected: 00125 00126 makVrv::DtSignalConnectionManager myConnections; 00127 00128 makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& mySimulation; 00129 makVrv::DT_PROTOCOL_NAMESPACE::DtEnvironmentalExistenceListener& myListener; 00130 DtTimedSection myTimer; 00131 makVrv::DtSimEntryObjectAgent* mySimEntryAgent; 00132 00133 EnvironmentAgentMap myEnvironmentAgents; 00134 EnvironmentUpdateGroupMap myRefreshRateGroups; 00135 EnvironmentIdList myForceUpdateList; 00136 00137 typedef boost::unordered_map<makVrv::DtUniqueID, DtVrlinkSimulatedEnvironmentProcess> StateMap; 00138 StateMap myStateMap; 00139 }; 00140 } 00141 }