![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2009 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: DtVrlinkAggregateSimDataProcessor.h,v $ $Revision: 1.1 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00012 00013 #pragma once 00014 00015 #include <vrfGuiCore/DtAggregateState.h> 00016 00017 #include <vrvVrl/vrvVrl.h> 00018 00019 #include <vrvCore/DtSimEntryUpdater.h> 00020 #include <vrvCore/DtSimDataProcessorInterface.h> 00021 #include <vrvUtil/DtBalancedUpdater.h> 00022 #include <vrvUtil/DtSignalConnectionManager.h> 00023 00024 #include <vlutil/vlPerformanceStats.h> 00025 00026 class DtAggregateStateRepository; 00027 00028 namespace makVrv 00029 { 00030 class DtSimEntryObjectAgent; 00031 00032 namespace DT_PROTOCOL_NAMESPACE 00033 { 00034 class DtVrlinkConnection; 00035 class DtAggregateExistenceListener; 00036 class DtVrlinkAggregateStateListener; 00037 } 00038 } 00039 00040 namespace makVrf 00041 { 00042 class DtAggregateStateObjectAgent; 00043 00044 namespace VRF_PROTOCOL_NAMESPACE 00045 { 00046 00048 class VRF_PROTOCOL_EXPORT DtAggregateSimDataProcessor : public makVrv::DtSimDataProcessorInterface 00049 { 00050 public: 00052 static DtAggregateSimDataProcessor* findInstance(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim); 00053 00055 static void registerInstance(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim,DtAggregateSimDataProcessor*); 00056 00058 DtAggregateSimDataProcessor(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim); 00059 00061 virtual ~DtAggregateSimDataProcessor(); 00062 00064 void postDrainInput(); 00065 00067 void setObjectUpdateRate(makVrv::DtUniqueID uniqueId, makVrv::DtSimEntryUpdater::UpdateRate rate); 00068 00070 void forceObjectUpdate(makVrv::DtUniqueID uniqueId); 00071 00073 void aggregateDiscovered(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkAggregateStateListener& listener); 00074 00076 void aggregateToBeDeleted(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkAggregateStateListener& listener); 00077 00079 virtual void createAndSendState(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkAggregateStateListener& listener, 00080 DtAggregateStateObjectAgent& objectDriver); 00081 virtual void setState(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkAggregateStateListener& listener, 00082 DtVrlinkSimulatedAggregateState& state); 00083 00084 protected: 00085 00086 static void postDrainInput(void* usr); 00087 00088 virtual void slot_postUpdateCallback(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkAggregateStateListener&); 00089 00090 protected: 00091 00092 //A Listener and a driver which will be updated with it. 00093 class AggregateStateUpdater 00094 { 00095 public: 00096 00097 AggregateStateUpdater(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkAggregateStateListener& listener, 00098 DtAggregateStateObjectAgent& driver, DtAggregateSimDataProcessor& processor); 00099 00100 AggregateStateUpdater(const AggregateStateUpdater& orig); 00101 00102 AggregateStateUpdater& operator=(const AggregateStateUpdater& orig); 00103 00104 //Are the updaters equal 00105 bool operator==(const AggregateStateUpdater& orig) const; 00106 00108 void update(double timeT); 00109 00110 protected: 00111 00112 makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkAggregateStateListener* myListener; 00113 DtAggregateStateObjectAgent* myObjectAgent; 00114 DtAggregateSimDataProcessor* myProcessor; 00115 }; 00116 00117 typedef std::vector<makVrv::DtUniqueID> AggregateIdList; 00118 00119 struct AggregateSimDataInstance 00120 { 00121 makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkAggregateStateListener* myListener; 00122 DtAggregateStateObjectAgent* myAgent; 00123 makVrv::DtSimEntryUpdater::UpdateRate myRate; 00124 }; 00125 00126 typedef std::map<makVrv::DtUniqueID,AggregateSimDataInstance > AggregateAgentMap; 00127 00128 typedef makVrv::DtBalancedUpdater<AggregateStateUpdater> AggregateUpdaterGroup; 00129 typedef std::map<makVrv::DtSimEntryUpdater::UpdateRate,AggregateUpdaterGroup> 00130 AggregateUpdateGroupMap; 00131 00132 protected: 00133 makVrv::DtSignalConnectionManager myConnections; 00134 00135 makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& mySimulation; 00136 makVrv::DT_PROTOCOL_NAMESPACE::DtAggregateExistenceListener& myListener; 00137 DtTimedSection myTimer; 00138 makVrv::DtSimEntryObjectAgent* mySimEntryAgent; 00139 00140 AggregateAgentMap myAggregateAgents; 00141 AggregateUpdateGroupMap myRefreshRateGroups; 00142 AggregateIdList myForceUpdateList; 00143 00144 typedef boost::unordered_map<makVrv::DtUniqueID, DtVrlinkSimulatedAggregateState> AggregateStates; 00145 AggregateStates myAggregateStates; 00146 }; 00147 } 00148 }