![]() |
MAK RTIspy API Documentation for HLA 1.3
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2008 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: execObserverMgr.h,v $ $Revision: 1.3 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00012 #ifndef DtRtiexecObserverMgr_H_ 00013 #define DtRtiexecObserverMgr_H_ 00014 00015 #include "rtiMsConfig.h" 00016 #include "rtiMsg.h" 00017 #include "rtiMsgCbMgr.h" 00018 #include "exec.h" 00019 #include <vlutil/vlSmartPointers.h> 00020 #include <vlutil/vlTime.h> 00021 #include <map> 00022 #include <list> 00023 00026 class DtRtiExec; 00027 class DtFedExec; 00028 class DtFedExCbInfo; 00029 class DtRtiexecObserver; 00030 class DtFederate; 00031 class DtSyncPt; 00032 class DtTickCallbackInfo; 00033 class DtTickWithExecCallbackInfo; 00034 00035 class DtMsgCbInfo { 00036 public: 00037 DtMsgCbInfo( DtRtiMsgKind msgKind, DtRtiMsgCbMgr::DtCallbackFcn fcn, 00038 DtRtiexecObserver* observer, bool isMomCallback ) : 00039 myMsgKind( msgKind ), myFcn( fcn ), myObserver( observer ), 00040 myIsMomCallback( isMomCallback ) {} 00041 ~DtMsgCbInfo() {} 00042 00043 bool operator<(const DtMsgCbInfo& other) const 00044 { 00045 return ( myMsgKind < other.myMsgKind || 00046 ( myMsgKind == other.myMsgKind && myFcn < other.myFcn ) || 00047 ( myMsgKind == other.myMsgKind && myFcn == other.myFcn && myObserver < other.myObserver ) ); 00048 } 00049 00050 DtRtiMsgKind myMsgKind; 00051 DtRtiMsgCbMgr::DtCallbackFcn myFcn; 00052 DtRtiexecObserver* myObserver; 00053 bool myIsMomCallback; 00054 }; 00055 00058 class DT_DLL_EXEC DtRtiexecObserverMgr 00059 { 00060 00061 public: 00062 00064 DtRtiexecObserverMgr(); 00065 00067 virtual ~DtRtiexecObserverMgr(); 00068 00070 virtual void setExec( DtBoost::shared_ptr<DtRtiExec> exec ); 00071 00073 virtual void addObserver( DtBoost::shared_ptr<DtRtiexecObserver> observer ); 00074 00076 virtual void removeObserver( DtBoost::shared_ptr<DtRtiexecObserver> observer ); 00077 00079 virtual void removeAllObservers(); 00080 00082 virtual void addRtiMsgCallback( DtRtiMsgKind msgKind, 00083 DtRtiMsgCbMgr::DtCallbackFcn fcn, DtRtiexecObserver* observer, 00084 bool isMomCallback ); 00085 00087 virtual void removeRtiMsgCallback( DtRtiMsgKind msgKind, 00088 DtRtiMsgCbMgr::DtCallbackFcn fcn, DtRtiexecObserver* observer, 00089 bool isMomCallback ); 00090 00093 virtual void addTickCallback( DtTickCbFn fcn, DtRtiexecObserver* observer, 00094 DtTime interval ); 00095 00097 virtual void removeTickCallback( DtTickCbFn fcn, DtRtiexecObserver* observer ); 00098 00101 virtual void addTickCallback( DtTickWithExecCbFn fcn, DtRtiexecObserver* observer, 00102 DtTime interval ); 00103 00105 virtual void removeTickCallback( DtTickWithExecCbFn fcn, DtRtiexecObserver* observer ); 00106 00108 static void federationCreatedCallback( DtFedExec* exec, void* usr ); 00109 void federationCreatedCallback( DtFedExec* exec ); 00110 00112 static void federationDestroyedCallback( DtFedExec* exec, void* usr ); 00113 void federationDestroyedCallback( DtFedExec* exec ); 00114 00116 static void federateJoinedCallback( DtFederate* federate, void* usr ); 00117 void federateJoinedCallback( DtFedExec* exec, DtFederate* federate ); 00118 00120 static void federateResignedCallback( DtFederate* federate, void* usr ); 00121 void federateResignedCallback( DtFedExec* exec, DtFederate* federate ); 00122 00124 static void syncPtRegisteredCallback( DtSyncPt* pt, void* usr ); 00125 void syncPtRegisteredCallback( DtFedExec* exec, DtSyncPt* pt ); 00126 00128 static void federationSynchronizedCallback( DtSyncPt* pt, void* usr ); 00129 void federationSynchronizedCallback( DtFedExec* exec, DtSyncPt* pt ); 00130 00132 static void syncPtAchievedCallback( DtFederate* fed, DtSyncPt* pt, void* usr ); 00133 void syncPtAchievedCallback( DtFedExec* exec, DtFederate* fed, DtSyncPt* pt ); 00134 00136 static void federateDisconnectedCallback( DtFederate* fed, void* usr ); 00137 void federateDisconnectedCallback( DtFedExec* exec, DtFederate* fed ); 00138 00140 static void federateReconnectSucceededCallback( DtFederate* fed, void* usr ); 00141 void federateReconnectSucceededCallback( DtFedExec* exec, DtFederate* fed); 00142 00144 static void federateReconnectFailedCallback( DtFederate* fed, void* usr ); 00145 void federateReconnectFailedCallback( DtFedExec* exec, DtFederate* fed); 00146 00148 static void updateLogFileNameCallback( const DtFilename& logFile, void* usr ); 00149 void updateLogFileNameCallback( const DtFilename& logFile ); 00150 00152 static void updateWebServerCallback( const DtInetAddr& webSpyIpAddr, int webSpyPort, void* usr ); 00153 void updateWebServerCallback( const DtInetAddr& webSpyIpAddr, int webSpyPort ); 00154 00156 virtual unsigned long connectionId() const; 00157 00158 protected: 00159 00161 DtRtiexecObserverMgr( const DtRtiexecObserverMgr& orig ); 00162 00164 DtRtiexecObserverMgr& operator=( const DtRtiexecObserverMgr& orig ); 00165 00166 protected: 00167 00168 typedef std::map<DtFedExec*, DtFedExCbInfo*> DtFedexToCbInfoMap; 00169 typedef std::set<DtMsgCbInfo> DtMsgCbSet; 00170 typedef std::set<DtTickCallbackInfo> DtTickCbSet; 00171 typedef std::set<DtTickWithExecCallbackInfo> DtTickWithExecCbSet; 00172 typedef std::list< DtBoost::shared_ptr<DtRtiexecObserver> > DtExecObsList; 00173 00175 DtBoost::shared_ptr<DtRtiExec> myExec; 00176 00178 DtExecObsList myObservers; 00179 00181 DtMsgCbSet myMsgCbSet; 00182 00184 DtTickCbSet myTickCbSet; 00185 00187 DtTickWithExecCbSet myTickWithExecCbSet; 00188 00190 DtFedexToCbInfoMap myFedexInfoMap; 00191 }; 00192 00193 00194 #endif //! DtRtiexecObserverMgr_H_ 00195 00196