MAK RTIspy API Documentation for HLA 1516
rtiAssistantPeer.h
Go to the documentation of this file.
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_

Document ID: Generated on Thu Jun 14 14:15:04 EDT 2012 from SVN revision 116116
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)