![]() |
MAK RTIspy API Documentation for HLA 1516
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2008 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: forwarderObserverForAssistant.h,v $ $Revision: 1.19 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00012 #ifndef forwarderObserverForAssistant_H_ 00013 #define forwarderObserverForAssistant_H_ 00014 00015 #include "forwarderObserver.h" 00016 #include <rtiMsConfig.h> 00017 #include <vlutil/vlUtil.h> 00018 #include <vlutil/vlTime.h> 00019 #include <vlutil/vlInetAddr.h> 00020 #include <assistantConnectionInfo.h> 00021 #include <rtiAssistantForwarderClient.h> 00022 #include <RIDparams.h> 00023 #include <map> 00024 #include <vector> 00025 #include <list> 00026 00027 class DtRtiMsg; 00028 class DtAssistantPrinter; 00029 class DtAssistantNtfyLvlUpdateMsg; 00030 class DtAssistantExitMsg; 00031 class DtAssistantStateObserveMsg; 00032 00038 class DT_DLL_FORWARDER DtForwarderObserverForAssistant : public DtRtiForwarderObserver 00039 { 00040 00041 public: 00042 struct DtForwarderObserverConnInfo 00043 { 00044 DtForwarderObserverConnInfo(const MAKRti::DtString& connName, 00045 const MAKRti::DtString& connType, 00046 const MAKRti::DtString& federationName, unsigned int connID, 00047 const DtInetAddrAndPort& connAddr, const MAKRti::DtString& connHost, 00048 unsigned int fedHandle = 0, 00049 DtHlaVersionId hlaVersion = DtHlaVersionUnknown, 00050 int connQueueStatus = 0) : 00051 myConnName(connName), 00052 myConnType(connType), 00053 myConnPID(0), 00054 myConnProcessName(), 00055 myConnCommandArgs(), 00056 myConnHost(connHost), 00057 myConnID(connID), 00058 myConnAddr(connAddr), 00059 myFedHandle( fedHandle ), 00060 myFederationName( federationName ), 00061 myConnQueueStatus( connQueueStatus ), 00062 myHlaVersion( hlaVersion ) {}; 00063 00064 bool operator<(const DtForwarderObserverConnInfo& other) const 00065 { 00066 return (myConnID < other.myConnID); 00067 } 00068 bool operator==(const DtForwarderObserverConnInfo& other) const 00069 { 00070 return (myConnID == other.myConnID ); 00071 } 00072 00073 MAKRti::DtString myConnName; 00074 MAKRti::DtString myConnHost; 00075 MAKRti::DtString myConnType; 00076 MAKRti::DtString myConnProcessName; 00077 MAKRti::DtString myConnCommandArgs; 00078 MAKRti::DtString myFederationName; 00079 unsigned int myConnID; 00080 unsigned int myFedHandle; 00081 unsigned int myConnPID; 00082 DtInetAddrAndPort myConnAddr; 00083 int myConnQueueStatus; 00084 DtHlaVersionId myHlaVersion; 00085 }; 00086 00087 struct DtForwarderObserverDroppedConnInfo 00088 { 00089 DtForwarderObserverDroppedConnInfo( const DtString& connName, 00090 const DtString& connType, const DtString& federationName, 00091 unsigned int connID, const DtInetAddrAndPort& connAddr, 00092 const DtString& connHost, DtTime startTime ) : 00093 myInfo( connName, connType, federationName, connID, connAddr, connHost ), 00094 myStartTime( startTime ) {} 00095 00096 bool operator<(const DtForwarderObserverDroppedConnInfo& other ) const 00097 { 00098 return ( myInfo.myConnID < other.myInfo.myConnID ); 00099 } 00100 00101 DtForwarderObserverConnInfo myInfo; 00102 MAKRti::DtTime myStartTime; 00103 }; 00104 00105 DtForwarderObserverForAssistant(); 00106 virtual ~DtForwarderObserverForAssistant(); 00107 00109 virtual void initialize( DtRIDParameters* params ); 00110 00112 00113 00114 static void tick( void* usr ); 00116 virtual void tick(); 00118 00119 virtual void queryForConnectionInfo( int& forwarderPort, 00120 MAKRti::DtInetAddr& forwarderToConnectTo ); 00121 00124 virtual void setForwarderInfo( int forwarderPort, 00125 const MAKRti::DtInetAddr& forwarderToConnectTo ); 00126 00128 virtual void enableNotifications(); 00129 00131 virtual void disableNotifications(); 00132 00134 00135 00138 static void processForwarderObserveMsg( const DtAssistantStateObserveMsg& msg, 00139 void* usr ); 00142 virtual void processForwarderObserveMsg( const DtAssistantStateObserveMsg& msg ); 00143 00145 static void processExitCmndMsg( const DtAssistantExitMsg& msg, void* usr ); 00147 virtual void processExitCmndMsg( const DtAssistantExitMsg& msg ); 00148 00150 static void processAssistantDisconnect( void* usr ); 00152 virtual void processAssistantDisconnect(); 00154 00156 virtual void processLogFileUpdatedEvent( const MAKRti::DtFilename& logFile ); 00157 00159 virtual int clientToForwarderConnectionEstablished( 00160 const MAKRti::DtString& connName, const MAKRti::DtString& connType, 00161 unsigned int connID, const DtInetAddrAndPort& connAddr ); 00162 00164 virtual int clientToForwarderConnectionLost( 00165 const MAKRti::DtString& connName, unsigned int connID, 00166 const DtInetAddrAndPort& connAddr ); 00167 00169 virtual void clientToForwarderFederateJoined( 00170 const DtString& connName, const DtString& connType, 00171 const DtString& federationName, unsigned int connID, 00172 unsigned int fedHandle, const DtInetAddrAndPort& connAddr, 00173 const MAKRti::DtString& connHost, unsigned int processId, 00174 const MAKRti::DtString& processName, const MAKRti::DtString& commandArgs, 00175 DtHlaVersionId hlaVersion ); 00176 00178 virtual void clientToForwarderFederateLost( 00179 const MAKRti::DtString& connName, const MAKRti::DtString& connType, 00180 unsigned int connID, unsigned int fedHandle, 00181 const DtInetAddrAndPort& connAddr ); 00182 00184 virtual int forwarderToForwarderExecConnected( 00185 const MAKRti::DtString& connName, unsigned int connID, 00186 const DtInetAddrAndPort& connAddr, const MAKRti::DtString& hostName, 00187 bool fullyCompliant ); 00188 00190 virtual int forwarderToForwarderExecLost( 00191 const MAKRti::DtString& connName, unsigned int connID, 00192 const DtInetAddrAndPort& connAddr ); 00193 00195 virtual int clientToForwarderExecConnected( 00196 const MAKRti::DtString& connName, unsigned int connID, 00197 const DtInetAddrAndPort& connAddr, const MAKRti::DtString& connHost, 00198 bool fullyCompliant ); 00199 00201 virtual int clientToForwarderExecLost( 00202 const MAKRti::DtString& connName, unsigned int connID, 00203 const DtInetAddrAndPort& connAddr ); 00204 00206 virtual void forwarderToForwarderConnectionEstablished( 00207 const MAKRti::DtString& connName, unsigned int connID, 00208 const DtInetAddrAndPort& connAddr ); 00209 00211 virtual void forwarderToForwarderConnectionLost( 00212 const MAKRti::DtString& connName, unsigned int connID, 00213 const DtInetAddrAndPort& connAddr ); 00214 00216 virtual int clientToForwarderSocketQueueUpdate( 00217 unsigned int connId, int connQueueStatus ); 00218 00221 virtual void waitingForFowrarderConnections( 00222 const DtForwarderPort::DtConnAndNameMap& allNeededFws, 00223 const DtForwarderPort::DtConnAndNameMap& stillNeededFws ); 00224 00227 virtual void notWaitingForFowrarderConnections(); 00228 00230 bool gotConnInfoFromAssistant(); 00231 00232 DtBoost::shared_ptr<DtRtiAssistantForwarderClient> assistantClient(){ return myAssistantClient; } 00233 00234 00235 protected: 00236 00238 virtual void addCallbacks(); 00239 00242 virtual void removeCallbacks(); 00243 00246 virtual void sendForwarderInfoToAssistant() const; 00247 00250 virtual void sendWaitingForForwardersToAssistant() const; 00251 00252 protected: 00253 00254 00255 00256 00258 DtBoost::shared_ptr<DtRtiAssistantForwarderClient> myAssistantClient; 00259 00261 DtAssistantPrinter* myAssistantPrinter; 00262 00264 bool myForwarderIsObserved; 00265 00267 DtRIDParameters* myParams; 00268 00270 MAKRti::DtInetAddr myHostAddr; 00271 00273 bool myGotConnInfoFromAssistant; 00274 00275 std::set<DtForwarderObserverConnInfo> myConnectedNotJoinedClientConns; 00276 std::set<DtForwarderObserverConnInfo> myClientForwarderConns; 00277 std::set<DtForwarderObserverConnInfo> myForwarderForwarderConns; 00278 std::set<DtForwarderObserverDroppedConnInfo> myUnexpectedlyDroppedClientConns; 00279 00282 DtNeededFwConnMap myNeededFws; 00283 00285 bool myIsWaitingForFws; 00286 00287 MAKRti::DtClock myClock; 00288 float myDefunctRemovalTime; 00289 00290 DtForwarderObserverConnInfo* myExecConnection; 00291 bool myExecIsLocal; 00292 00294 00295 int myForwarderPort; 00296 MAKRti::DtInetAddr myForwarderToConnectTo; 00298 }; 00299 00300 inline bool DtForwarderObserverForAssistant::gotConnInfoFromAssistant() 00301 { 00302 return myGotConnInfoFromAssistant; 00303 } 00304 00305 #endif //! forwarderObserverForAssistant_H_ 00306 00307