![]() |
MAK RTIspy API Documentation for HLA 1.3
|
00001 /********************************************************************* 00002 ** Copyright (c) 2008 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: rtiAssistantPeer.h,v $ $Revision: 1.51 $ $State: Exp $ 00007 *********************************************************************/ 00008 00009 #ifndef rtiAssistantPeer_H_ 00010 #define rtiAssistantPeer_H_ 00011 00014 00015 #include <rtiUtil.h> 00016 #include <rtiVersion.h> 00017 #include <vlutil/vlUtil.h> 00018 #include <vlutil/vlTime.h> 00019 #include <vlutil/vlPrint.h> 00020 #include <vlutil/vlSmartPointers.h> 00021 00022 #include "assistantDefaultMsgFact.h" 00023 #include "assistantMsgCbMgr.h" 00024 #include "assistantLicServerInfo.h" 00025 #include "assistantConnectionInfo.h" 00026 #include "assistantConnMsg.h" 00027 #include "connectionAndConfiguration.h" 00028 #include "rtiAssistantClient.h" 00029 #include "assistantInfo.h" 00030 #include "assistantInfoMsg.h" 00031 00032 class DtAssistantQueryMsg; 00033 class DtAssistantInfoMsg; 00034 class DtAssistantRemovalMsg; 00035 class DtAssistantLightweightInfoMsg; 00036 class DtAssistantConfig; 00037 class DtAssistantFederationInfo; 00038 class DtRtiConnectionConfigurationInfo; 00039 class DtUdpMsgSocket; 00040 00041 typedef void (*DtInterfaceFoundCb)( void* ); 00042 00043 #define DtCbInfoStruct( cbType ) \ 00044 struct cbType##Info \ 00045 { \ 00046 cbType##Info( cbType cb, void* usr ) : \ 00047 myCb(cb), \ 00048 myUsr(usr) \ 00049 { }; \ 00050 cbType myCb; \ 00051 void* myUsr; \ 00052 }; 00053 00054 00057 class DT_DLL_ASSISTANT DtRtiAssistantPeer 00058 { 00059 public: 00061 DtRtiAssistantPeer( int id, int port = DtASSISTANT_DEFAULT_PORT, 00062 const MAKRti::DtInetAddr& ipv4Addr = DtASSISTANT_DEFAULT_IPV4_ADDR, 00063 const MAKRti::DtInetAddr& ipv6Addr = DtASSISTANT_DEFAULT_IPV6_ADDR ); 00064 00066 virtual ~DtRtiAssistantPeer(); 00067 00070 virtual bool tick( unsigned int timeout = 0 ); 00071 00073 virtual void setMsgFactory(DtAssistantMessageFactory* fact); 00074 00076 virtual DtAssistantMessageFactory* msgFactory() const; 00077 00079 00080 00081 virtual void addMsgCallback(DtAssistantMsgKind msgKind, DtAssistantMsgCbMgr::DtCallbackFcn fcn, 00082 void *usr ); 00083 virtual void removeMsgCallback(DtAssistantMsgKind msgKind, DtAssistantMsgCbMgr::DtCallbackFcn fcn, 00084 void *usr ); 00085 00088 virtual void addInterfaceFoundCallback( DtInterfaceFoundCb cb, 00089 void* usr ); 00090 virtual void removeInterfaceFoundCallback( DtInterfaceFoundCb cb, 00091 void* usr ); 00092 00094 00096 virtual void sendQueryMsg(); 00097 00100 virtual void sendInfoMsg( const DtRtiConnectionAndConfiguration& connsAndConfigs, 00101 unsigned memoryPeriod, bool acceptRemoteCommands, bool removal); 00102 00105 virtual void sendLightweightInfoMsg( const DtRtiConnectionAndConfiguration& connsAndConfigs, 00106 unsigned memoryPeriod); 00107 00110 virtual void sendLicServerInfoMsg( const DtLicServerSet& licServers, 00111 bool removal); 00112 00115 virtual void sendStartRtiexecMsg( const DtRtiConnectionInfoDataPair& conn, 00116 const DtRtiConnectionConfigurationInfo& config ); 00117 00121 virtual void sendObserveFederationsMsg( const DtRtiConnectionInfo& conn, 00122 bool observe, const DtAssistantInfo& assistant = DtAssistantInfo(), 00123 int compId = -1 ); 00124 00127 virtual void sendObserveRtiExecLogMsg( const DtAssistantInfo& assistant, 00128 int compId, bool observe ); 00129 00132 virtual void sendObserveRtiexecRspMsg( const MAKRti::DtInetAddr& webSpyAddr, 00133 int webSpyPort, DtNotifyLevelType notifyLevel, int compId, 00134 const DtAssistantInfo& destination ); 00135 00138 virtual void sendObserveRtiForwarderMsg( const DtRtiConnectionInfo& conn, 00139 bool observe, const DtAssistantInfo& assistant, int compId ); 00140 00143 virtual void sendFederationStateMsg( const DtRtiConnectionInfoDataPair& conn, 00144 const DtAssistantFederationInfo& federation, bool isRemoval ); 00145 00148 virtual void sendNoFederationMsg( const DtRtiConnectionInfoDataPair& conn ); 00149 00152 virtual void sendFederateResignMsg( const DtAssistantInfo& assistant, 00153 int compId, int federationHdl, int federateHdl ); 00154 00157 virtual void sendFederationDestroyMsg( const DtAssistantInfo& assistant, 00158 int compId, int federationHdl ); 00159 00162 virtual void sendRidParamsRequestMsg( const DtAssistantInfo& assistant, 00163 int compId ); 00164 00168 virtual void sendLogRequestMsg( const DtAssistantInfo& assistant, 00169 int compId, unsigned maxLogSize ); 00170 00173 virtual bool sendLatencyTestRequestMsg( const DtAssistantInfo& assistant, 00174 int compId, int federationHdl, int federateHdl, bool runTest, 00175 bool continuous, bool shouldHalt, bool observing, 00176 unsigned int interactionPeriod, unsigned int numInteractions, 00177 unsigned int payloadBytes ); 00178 00181 virtual void sendNetworkTestEnableMsg( const DtAssistantInfo& assistant, 00182 int compId, int federationHdl, bool enable ); 00183 00186 virtual void sendRtiexecExitMsg( const DtAssistantInfo& assistant, 00187 int compId ); 00188 00191 virtual void sendNotifyObserveMsg(bool isObserving); 00192 00194 virtual void sendNotifyMsg(const MAKRti::DtString& text, 00195 DtNotifyLevelType notifyLevel, const MAKRti::DtString& sourceName ); 00196 00199 virtual void sendRemovalMsg(); 00200 00205 virtual void forwardMsg( const DtAssistantMsg& msg, int localCompId, 00206 const DtAssistantInfo& dest = DtAssistantInfo() ); 00207 00209 virtual int port() const; 00210 00213 virtual MAKRti::DtInetAddr ipv4Address() const; 00214 00217 virtual MAKRti::DtInetAddr ipv6Address() const; 00218 00220 virtual int id() const; 00221 00224 virtual MAKRti::DtInetAddr currentNetworkInterfaceAddr() const; 00225 00227 virtual void getMsgStats( unsigned& totalRecv, double& recvPerSecOverall, 00228 double& recvPerSecCurr, unsigned& totalProc, double& procPerSecOverall, 00229 double& procPerSecCurr, unsigned& totalSent, double& sentPerSecOverall, 00230 double& sentPerSecCurr ); 00231 00233 virtual DtU32 maxMsgSize() const; 00234 00235 #ifdef DtDIAGNOSTIC 00236 00237 void enableMsgDiagnostics( bool enable ); 00238 00239 #endif 00240 00241 protected: 00242 00246 virtual bool needsProcessing( const DtAssistantMsg& msg ); 00247 00250 virtual bool addSocketsForInterfaces(); 00251 00253 virtual bool readAndProcess( DtTime maxTime ); 00254 00256 virtual void calculateMsgStatistics(); 00257 00259 virtual void sendMsg( std::map< MAKRti::DtInetAddr, DtUdpMsgSocket*>::iterator sockIter, DtAssistantMsg& msg ); 00260 00262 virtual void sendMsgToAll( DtAssistantMsg& msg ); 00263 00265 virtual std::auto_ptr<DtAssistantMsg> netRead( DtUdpMsgSocket* sock, int *retCode ) const; 00266 00267 public: 00268 00269 DtCbInfoStruct(DtInterfaceFoundCb) 00270 00271 protected: 00272 00274 int myPort; 00275 00277 MAKRti::DtInetAddr myIpv4Addr; 00278 00280 MAKRti::DtInetAddr myIpv6Addr; 00281 00284 int myId; 00285 00288 std::map< MAKRti::DtInetAddr, DtUdpMsgSocket*> mySockets; 00289 00292 std::map< MAKRti::DtInetAddr, DtUdpMsgSocket*>::iterator mySocketIter; 00293 00296 MAKRti::DtInetAddr myCurrNetworkInterfaceAddr; 00297 00299 DtAssistantMsgCbMgr myMsgCbMgr; 00300 00302 DtAssistantMessageFactory* myMessageFactory; 00303 00305 DtAssistantDfltMsgFactory myDefaultMessageFactory; 00306 00308 DtClock myClock; 00309 00311 DtTime myNextCheckInterfacesTime; 00312 00314 DtTime myCheckInterfacesInterval; 00315 00317 DtTime myBeginProcessingTime; 00318 00320 DtTime myNextStatsTime; 00321 00323 DtTime myLastStatsTime; 00324 00325 struct DtPeerMsgStats 00326 { 00327 DtPeerMsgStats() : 00328 numMsgsCurrPeriod(0), numMsgsTotal(0), 00329 msgsPerSecLastPeriod(0), msgsPerSecOverall(0) {} 00330 00331 unsigned numMsgsCurrPeriod; 00332 unsigned numMsgsTotal; 00333 double msgsPerSecLastPeriod; 00334 double msgsPerSecOverall; 00335 }; 00336 00338 DtPeerMsgStats myReceivedMsgStats; 00339 00341 DtPeerMsgStats myProcessedMsgStats; 00342 00344 DtPeerMsgStats mySentMsgStats; 00345 00347 std::list<DtInterfaceFoundCbInfo> myInterfaceFoundCallbacks; 00348 00350 static const DtTime theStatisticsInterval; 00351 00353 bool myUsingIpv4; 00354 00356 bool myUsingIpv6; 00357 00358 #ifdef DtDIAGNOSTIC 00359 bool myDiagnosticsEnabled; 00360 #endif 00361 }; 00362 00363 00364 #endif // rtiAssistantPeer_H_