![]() |
MAK RTIspy API Documentation for HLA Evolved
|
00001 /********************************************************************* 00002 ** Copyright (c) 2009 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: connInfoMgr.h,v $ $Revision: 1.19 $ $State: Exp $ 00007 *********************************************************************/ 00008 00009 #ifndef connInfoMgr_H_ 00010 #define connInfoMgr_H_ 00011 00014 00015 #include "rtiMsConfig.h" 00016 #include "assistantMgr.h" 00017 #include "assistantLicServerInfo.h" 00018 #include "assistantMsgQueue.h" 00019 #include "connectionsCache.h" 00020 #include "rtiAssistantClient.h" 00021 #include "connectionAndConfiguration.h" 00022 00023 class DtRtiAssistantServer; 00024 class DtRtiAssistantPeer; 00025 class DtAssistantComponentMgr; 00026 class DtAssistantPreferencesInfoMgr; 00027 class DtAssistantQueryMsg; 00028 class DtAssistantLightweightInfoMsg; 00029 class DtAssistantInfoMsg; 00030 class DtAssistantRemovalMsg; 00031 class DtAssistantStartRtiexecMsg; 00032 00036 class DT_DLL_ASSISTANTAPP DtAssistantConnectionInfoMgr : public DtAssistantMgr 00037 { 00038 Q_OBJECT 00039 00040 public: 00041 00043 DtAssistantConnectionInfoMgr( DtBoost::shared_ptr<DtRtiAssistantServer> server, 00044 DtBoost::shared_ptr<DtRtiAssistantPeer> peer, 00045 DtBoost::shared_ptr<DtAssistantPreferencesInfoMgr> prefMgr, 00046 DtBoost::shared_ptr<DtAssistantComponentMgr> compMgr, 00047 const MAKRti::DtFilename& configDir, 00048 const MAKRti::DtString& logFileName); 00049 00051 virtual ~DtAssistantConnectionInfoMgr(); 00052 00053 private: 00054 00056 DtAssistantConnectionInfoMgr(DtAssistantConnectionInfoMgr const& ); 00057 00059 DtAssistantConnectionInfoMgr& operator= (DtAssistantConnectionInfoMgr const& ); 00060 00061 public: 00062 00064 virtual void tick(); 00065 00067 virtual void startShutdown(); 00068 00070 virtual bool isCacheFileVersionOld() const; 00071 00073 virtual unsigned int lightweightMemoryPeriod() const; 00074 00076 virtual unsigned int lightweightHeartbeatInterval() const; 00077 00079 virtual unsigned int assistantMemoryPeriod() const; 00080 00083 virtual unsigned int assistantHeartbeatInterval() const; 00084 00087 virtual unsigned int requestedAssistantHeartbeatInterval() const; 00088 00090 virtual bool acceptRemoteCommands() const; 00091 00093 virtual bool remoteAssistantAcceptsCommands( const DtAssistantInfo& assistant ) const; 00094 00097 virtual bool hostHasARemoteAssistantThatAcceptsCommands( 00098 const DtHostNameAddress& host, const MAKRti::DtInetAddr& interfaceAddr ) const; 00099 00102 virtual int localRtiexecCompId( const DtRtiConnectionInfo& conn ) const; 00103 00105 //1 or returns -1 if not found. 00106 virtual int localRtiForwarderCompId( const DtRtiConnectionInfo& conn ) const; 00107 00110 virtual bool getRemoteRtiexecLocation( const DtRtiConnectionInfo& conn, 00111 DtAssistantInfo& assistant, int& id ) const; 00112 00115 virtual bool getRemoteRtiForwarderLocation( const DtRtiConnectionInfo& conn, 00116 DtAssistantInfo& assistant, int& id ) const; 00117 00120 virtual bool getRemoteRtiexecConnInfo( const DtAssistantInfo& assistant, 00121 int id, DtRtiConnectionInfoDataPair& conn ) const; 00122 00125 virtual bool getRemoteForwarderConnInfo( const DtAssistantInfo& assistant, 00126 int id, DtRtiConnectionInfoDataPair& conn ) const; 00127 00130 virtual bool getChosenConnectionAndConfiguration( DtRtiConnectionInfoDataPair& conn, 00131 DtRtiConfigurationInfoDataPair& config ); 00132 00135 virtual bool getConnectionInfo( DtRtiConnectionInfoDataPair& conn ); 00136 00140 virtual bool getConfigurationForConn( const DtRtiConnectionInfo& conn, 00141 DtRtiConfigurationInfoDataPair& config ); 00142 00144 virtual MAKRti::DtString connectionName( const DtRtiConnectionInfo& conn ); 00145 00149 virtual bool isStillDefaultChosen() const; 00150 00152 virtual const DtRtiConnectionAndConfiguration& connectionsAndConfigurations(); 00153 00155 virtual void addUserDefinedConnections( const DtRtiConnectionAndConfiguration& conns ); 00156 00158 virtual void removeUserDeletedConnections( const DtRtiConnectionAndConfiguration& conns ); 00159 00161 virtual void removeAllLocalRtiexecsForwarders(); 00162 00164 virtual void removeAllLocalLightweightConns(); 00165 00169 virtual bool isConnConflicting( const DtRtiConnectionInfo& conn, 00170 MAKRti::DtString& reason ) const; 00171 00173 void saveConnections(); 00174 00175 protected: 00176 00179 00180 00181 static void processQueryMsg(const DtAssistantQueryMsg& queryMsg, void* usr); 00182 virtual void processQueryMsg(const DtAssistantQueryMsg& queryMsg); 00183 00185 static void processInfoMsg(const DtAssistantInfoMsg& infoMsg, void* usr); 00186 virtual void processInfoMsg(const DtAssistantInfoMsg& infoMsg); 00187 00189 static void processLightweightInfoMsg(const DtAssistantLightweightInfoMsg& infoMsg, void* usr); 00190 virtual void processLightweightInfoMsg(const DtAssistantLightweightInfoMsg& infoMsg); 00191 00193 static void processRemovalMsg(const DtAssistantRemovalMsg& remMsg, void* usr); 00194 virtual void processRemovalMsg(const DtAssistantRemovalMsg& remMsg); 00195 00197 static void processStartRtiexecMsg( const DtAssistantStartRtiexecMsg& msg, void* usr); 00198 virtual void processStartRtiexecMsg( const DtAssistantStartRtiexecMsg& msg ); 00199 00201 00203 static void processInterfaceFound( void* usr ); 00204 00207 virtual void processInterfaceFound(); 00208 00209 struct DtAssistantState 00210 { 00211 DtAssistantState() : heartbeated( true ), lightweightInactivePeriod(120), 00212 assistantInactivePeriod(10), acceptsRemoteCommands(true) {} 00213 bool heartbeated; 00214 unsigned int lightweightInactivePeriod; 00215 unsigned int assistantInactivePeriod; 00216 bool acceptsRemoteCommands; 00217 std::map<int, DtRtiConnectionInfo> rtiexecs; 00218 std::map<int, DtRtiConnectionInfo> forwarders; 00219 }; 00220 typedef std::map< DtAssistantInfo, DtAssistantState > DtAssistantStateMap; 00221 typedef std::pair< DtAssistantInfo, DtAssistantState > DtAssistantStatePair; 00222 00223 00224 signals: 00225 00228 void heartbeat(); 00229 00232 void prune(); 00233 00235 void connectionsAddedOrUpdated( const DtRtiConnectionAndConfiguration& conns ); 00236 00238 void connectionsAboutToBeRemoved( const DtRtiConnectionAndConfiguration& conns ); 00239 00241 void connectionsRemoved( const DtRtiConnectionAndConfiguration& conns ); 00242 00244 void assistantFound( const DtAssistantInfo& info ); 00245 00247 void assistantLost( const DtAssistantInfo& info ); 00248 00250 void rtiexecStartupRequested( const DtRtiConnectionInfoDataPair&, 00251 const DtRtiConnectionConfigurationInfo&, bool ); 00252 00253 public slots: 00254 00256 void processLocalRtiComponentConnected( int compId ); 00257 00259 void processLocalRtiComponentNotConnected( int compId ); 00260 00262 void processLocalForwarderHasRtiexec( int compId ); 00263 00265 void processLocalForwarderHasNoRtiexec( int compId ); 00266 00268 void processNewChosenConnection( const DtRtiConnectionInfo& conn, 00269 const DtRtiConnectionConfigurationInfo& config ); 00270 00272 void processClearChosenConnection(); 00273 00275 void setLightweightMemory( unsigned int newVal ); 00276 00278 void setAssistantUpdateInterval( unsigned int newVal ); 00279 00281 void setAcceptRemoteCommands( bool newVal ); 00282 00283 protected: 00284 00286 virtual void heartbeatAssistant(); 00287 00289 virtual void heartbeatLightweightConnections(); 00290 00293 virtual void pruneStaleLightweightConns(); 00294 00297 virtual void pruneStaleAssistantsExecsFwrdrs(); 00298 00302 virtual void determineHeartbeatIntervals(); 00303 00306 virtual DtAssistantStateMap::iterator findOrAddRemoteAssistant( const DtAssistantInfo& assistant ); 00307 00311 virtual void unverifyRtiexecsForwardersForAssistant( DtAssistantStateMap::iterator astntIter, 00312 DtRtiConnectionAndConfiguration& connsToRemove, 00313 DtRtiConnectionAndConfiguration& updatedConns ); 00314 00319 virtual void unverifyListedRtiexecsForwardersForAssistant( 00320 const DtRtiConnectionAndConfiguration& removeList, 00321 DtAssistantStateMap::iterator astntIter, 00322 DtRtiConnectionAndConfiguration& connsToRemove, 00323 DtRtiConnectionAndConfiguration& updatedConns ); 00324 00329 virtual void addListedRtiexecsForwardersForAssistant( 00330 const DtRtiConnectionAndConfiguration& addList, 00331 DtAssistantStateMap::iterator astntIter, 00332 DtRtiConnectionAndConfiguration& connsToRemove, 00333 DtRtiConnectionAndConfiguration& updatedConns ); 00334 00337 virtual void checkForConflictingConns( 00338 DtRtiConnectionAndConfiguration& updatedConns ); 00339 00342 virtual void removeConnections( 00343 const DtRtiConnectionAndConfiguration& connsToRemove ); 00344 00347 virtual void setInterfaceForPredefinedConns( const MAKRti::DtInetAddr& interfaceAddr ); 00348 00349 protected: 00350 00352 DtBoost::shared_ptr<DtConnectionCache> myConnectionCache; 00353 00355 DtBoost::shared_ptr<DtAssistantComponentMgr> myCompMgr; 00356 00358 DtBoost::shared_ptr<DtAssistantPreferencesInfoMgr> myPrefMgr; 00359 00361 bool myAcceptRemoteCmds; 00362 00364 DtClock myClock; 00365 00368 DtTime myNextAssistantHeartbeatTime; 00369 00372 DtTime myNextLightweightHeartbeatTime; 00373 00376 DtTime myNextAssistantInfoRemovalTime; 00377 00380 DtTime myNextLightweightRemovalTime; 00381 00383 unsigned int myAssistantHeartbeatInterval; 00384 00386 unsigned int myLightweightHeartbeatInterval; 00387 00390 unsigned int myAssistantInfoRemovalPeriod; 00391 00394 unsigned int myLightweightRemovalPeriod; 00395 00397 MAKRti::DtString myHostName; 00398 00400 DtRtiConnectionAndConfiguration myRemovedLocalExecsAndFwrdrs; 00401 00403 DtAssistantStateMap myRemoteAssistantStates; 00404 00406 DtRtiConnectionAndConfiguration myConnsAndConfigs; 00407 00411 bool myStillDefaultChosen; 00412 00415 bool myPredefinedConnsNeedInterface; 00416 00419 MAKRti::DtInetAddr myPotentialPredefinedConnsInterface; 00420 00423 DtTime mySetPredefinedConnsInterfaceTime; 00424 00426 MAKRti::DtString myLogFileName; 00427 }; 00428 00429 #endif