VR-Forces 4.0.4 Class Documentation
include/vrfVrlSharedSource/DtVrfDriver.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 2008 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 ******************************************************************************/
00005 /******************************************************************************
00006 ** $RCSfile: DtVrfDriver.h,v $ $Revision: 1.11 $ $State: Exp $
00007 ******************************************************************************/
00008 
00011 
00013 
00014 #pragma once
00015 
00016 #include <vrfGuiCore/DtGuiThreadVrfRemoteController.h>
00017 #include <vrfGuiCore/DtEntityStateListenerExtensions.h>
00018 #include <vrvVrl/DtConnection.h>
00019 #include <vrvUtil/DtSignalConnectionManager.h>
00020 #include <vrfVrlSharedSource/vrfProtocol.h>
00021 
00022 #include <vrfVrlSharedSource/DtVrfEnvironmentProcessor.h>
00023 #include <vrfVrlSharedSource/DtVrfAggregateProcessor.h>
00024 #include <vrfVrlSharedSource/DtExtendedStateDataProcessor.h>
00025 #include <vrfVrlSharedSource/DtStateCacheManager.h>
00026 
00027 #include <vrvVrl/DtVrlinkConnection.h>
00028 #include <vrvVrl/DtVrlinkEntityStateListener.h>
00029 #include <vrvVrl/DtEntityExistenceListener.h>
00030 #include <vrvVrl/DtEntityStateInterceptorCreator.h>
00031 
00032 #include <vrvCore/DtEntityState.h>
00033 
00034 #include <vlpi/entityType.h>
00035 #include <matrix/vlVector.h>
00036 
00037 #include <vrftasks/setReqFact.h>
00038 #include <vrftasks/taskFactory.h>
00039 #include <vrfutil/ceFactory.h>
00040 #include <vrfplan/simCommandFactory.h>
00041 #include <vrftasks/adminContentFactory.h>
00042 #include <vrfExtProtocol/ifContFactory.h>
00043 #include <vrfmsgs/vrfObjectMessageFactory.h>
00044 #include <vrftasks/reportFactory.h>
00045 #include <vrfmsgs/vrfObjectMessageExecutive.h>
00046 
00048 #include <vrfmsgs/msgExec.h>
00049 #include <vrfplan/plan.h>
00050 #include <vrfExtObjects/refExtEntList.h>
00051 #include <vrfutil/scenario.h>
00052 
00053 #include <vl/commentInter.h>
00054 
00055 
00056 class DtVrfObjectMessage;
00057 
00058 class DtVrfRemoteController;
00059 class DtVrfMessageInterface;
00060 class DtScenarioLoadInformation;
00061 class DtSetDataRequest;
00062 class DtSimTask;
00063 class DtSimInterfaceContent;
00064 class DtRemoteLoggerController;
00065 class DtReflectedIffList;
00066 
00067 #if DtDIS
00068 #define DtCommentCallbackFcn DtCommentPduCb
00069 #elif DtHLA
00070 #define DtCommentCallbackFcn DtCommentInteractionCb
00071 #endif
00072 
00073 namespace makVrv
00074 {
00075    class DtVrlinkElement;
00076 
00077    namespace DT_PROTOCOL_NAMESPACE
00078    {
00079       class DtEntitySimDataProcessor;
00080    }
00081 }
00082 
00083 namespace makVrf 
00084 {
00085    class DtNetworkMessageInterface;
00086    class DtNetworkMessageInterfaceHandlerAgent;
00087 
00088    namespace VRF_PROTOCOL_NAMESPACE
00089    {
00090       class DtVrfBackendInterceptor;
00091       class DtVrfConnectionHelper;
00092       class DtVrfObjectDataStateProcessor;
00093       class DtVrfEnvironmentObjectDataStateProcessor;
00094       class DtEnvironmentSimDataProcessor;
00095       class DtVrfAggregateObjectDataStateProcessor;
00096       class DtAggregateSimDataProcessor;
00097       class DtVrfFogOfWarHandler;
00098       class DtVrfEmbarkationProcessor;
00099       class DtIffSimDataProcessor;
00100 
00101       class VRF_PROTOCOL_EXPORT DtVrfVrlinkEntityStateListener : public makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEntityStateListener,
00102          public DtEntityStateListenerExtensions
00103       {
00104       public:
00105          DtVrfVrlinkEntityStateListener(makVrv::DtUniqueID id);
00106 
00108          virtual ~DtVrfVrlinkEntityStateListener();
00109 
00110       protected:
00111          virtual void postUpdate();
00112       };
00113 
00114       class VRF_PROTOCOL_EXPORT DtVrfVrlinkEntityStateListenerCreator : public makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEntityStateListenerCreator
00115       {
00116       public:
00117 
00120          static DtVrfVrlinkEntityStateListenerCreator& instance(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim);
00121 
00123          virtual ~DtVrfVrlinkEntityStateListenerCreator();
00124 
00125    #ifdef DtHLA
00126 
00127          //functionality.
00128          virtual makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEntityStateListener* create(DtHlaObject* object);
00129    #endif
00130 
00131    #ifdef DtDIS
00132 
00133 
00134          virtual makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEntityStateListener* create(const DtEntityIdentifier& id, 
00135             const DtEntityType& type);
00136    #endif
00137 
00139          DtVrfVrlinkEntityStateListenerCreator(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection&);
00140       };
00141       
00142 
00143       class VRF_PROTOCOL_EXPORT DtVrfVrlinkAggregateStateListener : public makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkAggregateStateListener,
00144          public DtEntityStateListenerExtensions
00145       {
00146       public:
00147          DtVrfVrlinkAggregateStateListener(makVrv::DtUniqueID id);
00148 
00150          virtual ~DtVrfVrlinkAggregateStateListener();
00151       };
00152 
00153       class VRF_PROTOCOL_EXPORT DtVrfVrlinkAggregateStateListenerCreator : public makVrv::DT_PROTOCOL_NAMESPACE::DtAggregateStateListenerCreator
00154       {
00155       public:
00156 
00159          static DtVrfVrlinkAggregateStateListenerCreator& instance(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim);
00160 
00162          virtual ~DtVrfVrlinkAggregateStateListenerCreator();
00163 
00164    #ifdef DtHLA
00165 
00166          //functionality.
00167          virtual makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkAggregateStateListener* create(DtHlaObject* object);
00168    #endif
00169 
00170    #ifdef DtDIS
00171 
00172 
00173          virtual makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkAggregateStateListener* create(const DtEntityIdentifier& id, 
00174             const DtEntityType& type);
00175    #endif
00176 
00178          DtVrfVrlinkAggregateStateListenerCreator(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection&);
00179       };
00180       
00181       class VRF_PROTOCOL_EXPORT DtVrfEntityStateInterceptorCreator : public makVrv::DT_PROTOCOL_NAMESPACE::DtEntityStateInterceptorCreator
00182       {
00183       public:
00184          static DtEntityStateInterceptorCreator& instance(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim)
00185          {
00186             DtVrfEntityStateInterceptorCreator* creator = 
00187                dynamic_cast<DtVrfEntityStateInterceptorCreator*>(sim.findInstance(
00188                   "DtEntityStateInterceptorCreator"));
00189             if(!creator)
00190             {
00191                creator = new DtVrfEntityStateInterceptorCreator;
00192                sim.registerInstance("DtEntityStateInterceptorCreator",creator);
00193             }
00194             return *creator;
00195          }
00196 
00198          virtual ~DtVrfEntityStateInterceptorCreator()
00199          {
00200          }
00201 
00202          virtual DtEntityStateRepository* create(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkEntityStateListener* listener);
00203 
00204          DtVrfEntityStateInterceptorCreator()
00205          {
00206          }
00207       };
00208 
00209       class VRF_PROTOCOL_EXPORT DtVrfEntityReflectedListCreator : public makVrv::DT_PROTOCOL_NAMESPACE::DtVrvEntityReflectedListCreator
00210       {
00211       public:
00212 
00213          static makVrv::DT_PROTOCOL_NAMESPACE::DtVrvEntityReflectedListCreator&
00214             instance(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim);
00215 
00216          virtual DtReflectedEntityList* create(makVrv::DT_PROTOCOL_NAMESPACE::DtEntityExistenceListener&);
00217 
00218       #if DtHLA
00219          virtual DtReflectedEntityList* create(makVrv::DT_PROTOCOL_NAMESPACE::DtEntityExistenceListener&, DtDDMRegionSet&);
00220       #endif
00221 
00222       protected:
00223          DtVrfEntityReflectedListCreator(makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection& sim);
00224       };
00225 
00227       class VRF_PROTOCOL_EXPORT DtVrfDriver : public VRF_DRIVER_BASE_CLASS
00228       {
00229       public:
00230          DtVrfDriver(makVrv::DtAgentManager& agentManager, const std::string& uniqueName);
00231 
00232          virtual ~DtVrfDriver();
00233 
00234       public:
00235          virtual bool onStart();
00236 
00237       public:
00239          virtual void realizeConfiguration(const makVrv::DtConfiguration& config);
00240 
00242          virtual void sendLoggerSetFilename(std::string filename);
00243 
00245          virtual void sendLoggerRecordMessage();
00246 
00248          virtual void sendLoggerStopMessage();
00249 
00252          virtual void newScenario(const DtScenario*, int startTimeOfDay = 12 * 3600);
00253 
00255          virtual void loadScenario(const DtScenarioLoadInformation*, bool deleteMemory = false);
00256 
00259          virtual void saveScenario(const DtScenario*, DtPreserveMappingsFcn fcn = 0, void* userData = 0,
00260             bool deleteMemory = false);
00261 
00263          virtual void closeScenario();
00264 
00266          virtual void createEnvironmentalObject(DtSimulationAddress addr, DtEntityType, int force,
00267             std::vector<DtVector>, DtEnvironmentalCreationData data );
00268 
00270          virtual void getMessageFilterStatus(std::map<std::string,bool>& statusMap) const;
00271 
00273          virtual void setMessageFilterStatus(const std::map<std::string,bool>& statusMap);
00274 
00276          virtual void getMessageProcessorStatus(std::map<std::string,bool>& statusMap) const;
00277 
00279          virtual void setMessageProcessorStatus(const std::map<std::string,bool>& statusMap);
00280 
00283          virtual void registerSimMessageCallbackFor(int t, bool reg);
00284 
00287          virtual void registerRadioMessageCallbackFor(int t, bool reg);
00288 
00291          virtual void registerObjectMessageCallbackFor(int t, bool reg);
00292 
00294          virtual void setTimeoutInterval(int i);
00295 
00297          virtual void sendMessageToObject(const DtVrfObjectMessage* m, DtSimulationAddress addr);
00298 
00301          virtual void sendMessage(const DtSimInterfaceContent* m, DtSimulationAddress addr);
00302 
00304          virtual void addSetCreatorFcn(std::string, int, DtSetDataRequestCreatorFcn);
00305 
00307          virtual void addTaskCreatorFcn(std::string, int, DtSimTaskCreatorFcn);
00308 
00310          virtual void addInterfaceContentCreatorFcn(int, DtInterfaceContentCreatorFcn);
00311 
00313          virtual void addObjectMessageCreatorFcn(int, DtVrfObjectMessageCreatorFcn);
00314 
00316          virtual void addReportCreatorFcn(std::string, int, DtSimReportCreatorFcn);
00317 
00319          virtual void addAdminContentCreatorFcn(std::string, int, DtAdminContentCreatorFcn);
00320 
00322          virtual void addSimulationCommandCreatorFcn(std::string, int, DtSimCommandCreatorFcn);
00323 
00325          virtual void addConditionCreatorFcn(std::string, int, DtCondExprCreatorFcn);
00326 
00328          virtual void registerCommentInteractionCallback(DtCommentCallbackFcn, void*);
00329 
00331          virtual void unregisterCommentInteractionCallback(DtCommentCallbackFcn, void*);
00332 
00337          virtual DtSimpleTypedDictionary& extendedStateFor(makVrv::DtUniqueID id, bool forceUpdate = true);
00338 
00340          makVrv::DT_PROTOCOL_NAMESPACE::DtEntitySimDataProcessor* dataProcessor()
00341          {
00342             return myDataProcessor;
00343          }
00344 
00345          DtEnvironmentSimDataProcessor*  environmentDataProcessor()
00346          {
00347             return myEnvironmentDataProcessor;
00348          }
00349 
00350          DtAggregateSimDataProcessor*  aggregtateDataProcessor()
00351          {
00352             return myAggregateDataProcessor;
00353          }
00354 
00355          DtExtendedStateDataProcessor*  extendedDataStateProcessor()
00356          {
00357             return myExtendedStateDataProcessor;
00358          }
00359 
00360          void setUseThreadFlag(bool b)
00361          {
00362             myUseThreadFlag = b;
00363          }
00364 
00367          virtual void receivedNetworkMessage(DtNetworkMessageInterface* iface);
00368 
00370          boost::signal<void ()> signal_connectionSetUp;
00371          boost::signal<void ()> signal_connectionCleanedUp;
00372          boost::signal<void ()> signal_connectionAboutToBeCleanedUp;
00373 
00374       public:
00375 
00378          DtVrfRemoteController* remoteController();
00379          const DtVrfRemoteController* remoteController() const;
00381 
00382       protected:
00383          virtual void onSetupExerciseConnection();
00384          virtual void onCleanupExerciseConnection();
00385 
00387          static void simMessageCallback(DtSimMessage* msg, void* usr);
00388          virtual void processSimMessage(DtSimMessage* msg);
00389 
00391          static void radioMessageCallback(const DtVrfObjectMessage* msg, void* usr);
00392          virtual void processRadioMessage(const DtVrfObjectMessage* msg);
00393 
00395          virtual void elementAttributeChangeRequested( 
00396             makVrv::DtUniqueID id, makVrv::DtUniqueID parentId, DtBoost::shared_ptr<const makVrv::DtElementAttribute> atr );
00397 
00398          makVrv::DtVrlinkElement* findElementWithId(makVrv::DtUniqueID id) const;
00399 
00400       protected:
00401          DtVrfRemoteController*     myRemoteController;
00402          DtVrfMessageInterface*     myVrfMessageInterface;
00403          DtVrfBackendInterceptor*   myBackEndInterceptor;
00404          DtVrfConnectionHelper*     myConnectionHelper;
00405          DtRemoteLoggerController*  myLoggerControl;
00406 
00407          makVrv::DT_PROTOCOL_NAMESPACE::DtEntitySimDataProcessor*  myDataProcessor;
00408          DtEntityStateCacheManager* myEntityStateCacheManager;
00409 
00410          DtEnvironmentSimDataProcessor*  myEnvironmentDataProcessor;
00411          DtEnvironmentProcessCacheManager*   myEnvironmentProcessCacheManager;
00412          DtExtendedStateDataProcessor*  myExtendedStateDataProcessor;
00413          DtVrfObjectDataStateProcessor*   myVrfObjectDataStateDataProcessor;
00414          DtVrfEnvironmentObjectDataStateProcessor*   myVrfEnvironmentObjectDataStateDataProcessor;
00415 
00416          DtAggregateSimDataProcessor*  myAggregateDataProcessor;
00417          DtAggregateStateCacheManager* myAggregateStateCacheManager;
00418 
00419          DtReflectedIffList*           myReflecedIffList;
00420          DtIffSimDataProcessor*        myIffDataProcessor;
00421          DtIffStateCacheManager*       myIffStateCacheManager;
00422 
00423          DtVrfAggregateObjectDataStateProcessor*   myVrfAggregateObjectDataStateDataProcessor;
00424 
00425          std::string                   myHostAddressString;
00426          int                           mySessionId;
00427          DtVrfFogOfWarHandler*         myFogOfWarHandler;
00428 
00429          DtVrfEmbarkationProcessor*    myVrfEmbarkationProcessor;
00430          makVrv::DtSignalConnectionManager     myConnectionManager;
00431 
00434          DtNetworkMessageInterfaceHandlerAgent* myNetworkMessageInterfaceHandlerAgent;
00435 
00436          typedef std::map<unsigned int, bool> ContextMap;
00437          typedef std::map<makVrv::DtUniqueID, ContextMap> ShowHideContextMap;
00438 
00439          ShowHideContextMap myShowHideContextMap;
00440       };
00441 
00442       inline DtVrfRemoteController* DtVrfDriver::remoteController()
00443       {
00444          return (myRemoteController);
00445       }
00446 
00447       inline const DtVrfRemoteController* DtVrfDriver::remoteController() const
00448       {
00449          return (myRemoteController);
00450       }
00451    }}

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)