VR-Forces 4.0.4 Class Documentation
include/vrfVrlSharedSource/DtVrlinkAggregateSimDataProcessor.h
Go to the documentation of this file.
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 }

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)