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

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)