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

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)