![]() |
VR-Forces 4.0.4 Class Documentation
|
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 }}