MAK RTIspy API Documentation for HLA 1.3
connectMgr.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 ** Copyright (c) 1998 MaK Technologies, Inc.
00003 ** All rights reserved.
00004 *********************************************************************/
00005 /*********************************************************************
00006 ** $RCSfile: connectMgr.h,v $ $Revision: 1.78 $ $State: Exp $
00007 *********************************************************************/
00008 
00009 #ifndef connectMgr_H_
00010 #define connectMgr_H_
00011 
00014 
00015 
00016 #include "rtiMsConfig.h"
00017 #include <vlutil/vlFedTarget.h> 
00018 #include <vlutil/vlMutex.h>
00019 #include <vlutil/vlStringUtil.h>
00020 #include "RIDparams.h"
00021 #include "rtiMsgCbMgr.h"
00022 #include "rtiMsgFact.h"
00023 #include "fedWrapChain.h"
00024 #include "dfltMsgFact.h"
00025 #include "connection.h"
00026 #include "metadata.h"
00027 
00028 class DtRetractInfoList;
00029 class DtRtiMsg;
00030 class DtRtiConnection;
00031 class DtFedAmbWrapper;
00032 class DtRtiMsgQueue;
00033 class DtLogicalTimeFactory;
00034 class DtMessageThrottle;
00035 class DtFederateMgr;
00036 class DtMulticastEntry;
00037 class DtRtiAssistantLrcClient;
00038 class DtPartnerMgr;
00039 
00040 #ifdef DtIFSPEC1516E
00041 namespace rti1516e
00042 {
00043    class FederateAmbassador;
00044 }
00045 #endif
00046 
00047 
00057 class DT_DLL_LRC DtConnectionMgr
00058 {
00059 public:
00061    typedef DtConnectionMgr*
00062       (*DtConnectionMgrCreator)(DtRIDParameters* p,  bool isFederate, 
00063       DtBoost::shared_ptr<DtRtiAssistantLrcClient> assistantClient);
00064 
00065 protected:
00066 
00068    DtConnectionMgr(DtRIDParameters* params, bool isFederate = false, 
00069       DtBoost::shared_ptr<DtRtiAssistantLrcClient> assistantClient = 
00070       DtBoost::shared_ptr<DtRtiAssistantLrcClient>());
00071 
00072 public:
00073 
00075    virtual ~DtConnectionMgr();
00076 
00077 private:
00078    
00080    DtConnectionMgr(DtConnectionMgr const& );
00081 
00083    DtConnectionMgr& operator= (DtConnectionMgr const& );
00084 
00085 public:
00086 
00090    virtual int init(DtRIDParameters* params);
00091 
00094    virtual void initParams(DtRIDParameters* params);
00095 
00097    virtual void enableSmartForwarding(bool enable, int maxNumFederates);
00098 
00100    virtual DtRIDParameters* params();
00101 
00103    virtual void setFederateMgr( DtFederateMgr* fedMgrPtr );
00104 
00105 #ifdef DtIFSPEC1516E
00106 
00107    virtual void setFederateAmbassador( rti1516e::FederateAmbassador* fedAmb );
00108 #endif
00109 
00111 
00114    virtual int send(const DtRtiMsg& msg, 
00115                     MAKRti::DtTransportType transport,
00116                     const MAKRti::DtInetAddr& addr = MAKRti::DtInetAddr::inaddrAny());
00117 
00120    virtual int sendStamped(const DtRtiMsg& msg, 
00121       MAKRti::DtTransportType transport,
00122       const MAKRti::DtInetAddr& = MAKRti::DtInetAddr::inaddrAny());
00123 
00126    virtual int sendStampedAnonymous(const DtRtiMsg& msg, 
00127                                     MAKRti::DtTransportType transport,
00128                                     const MAKRti::DtInetAddr& addr = MAKRti::DtInetAddr::inaddrAny());
00129 
00132    virtual int sendAndDelete(DtRtiMsg* msg, 
00133                              MAKRti::DtTransportType transport,
00134                              const MAKRti::DtInetAddr& addr = MAKRti::DtInetAddr::inaddrAny());
00135 
00138    virtual int sendStampedAndDelete(DtRtiMsg* msg, 
00139                                     MAKRti::DtTransportType transport,
00140                                     const MAKRti::DtInetAddr& = MAKRti::DtInetAddr::inaddrAny());
00141 
00144    virtual int sendStampedAnonymousAndDelete(DtRtiMsg* msg, 
00145                                              MAKRti::DtTransportType transport,
00146                                              const MAKRti::DtInetAddr& addr = MAKRti::DtInetAddr::inaddrAny());
00147 
00152    virtual void sendLoopback(DtRtiMsg* msg);
00153 
00156    virtual bool flush();
00157 
00160    virtual bool drainBacklog( MAKRti::DtTime timeout = 0.0 );
00161 
00165    virtual void activateTransmitDelay();
00166 
00168    virtual bool delayTransmit() const;
00169 
00176    virtual void testTransmitDelay();
00177 
00181    virtual void activateAutoProvideDelay();
00182 
00184    virtual bool delayAutoProvide() const;
00185 
00187    bool allProvideUpdateRequestsDelayed() const;
00188 
00191    virtual void testAutoProvideDelay();
00192    
00194    virtual void processQueuedMessages();
00195 
00197    virtual void flushQueuedMessages();
00198 
00201    virtual unsigned long incrementServiceCallCount();
00202 
00204    virtual unsigned long serviceCallCount() const;
00205 
00207 
00208    virtual void setProcessingTick(bool processingTick);
00209    virtual bool processingTick() const;
00211 
00213 
00214    virtual void setEvokingCallbacks(bool evokingCbs);
00215    virtual bool evokingCallbacks() const;
00217 
00219 
00222    virtual bool tick();
00223 
00226    virtual bool processConnection( DtRtiConnection* conn,
00227       MAKRti::DtTransportType trans);
00228 
00231    virtual bool processConnections();
00232 
00235    virtual DtRtiMsg* getMessage();
00236 
00238 
00239 
00240    virtual void addPendingMsg(DtRtiMsg* msg);
00241    virtual bool processPendingMsg();
00242    virtual DtRtiMsg* nextPendingMsg();
00243    virtual void emptyPendingMsgList();
00244    virtual int pendingMsgCount();
00246 
00248    virtual void updateBufferSizes();
00249 
00252    virtual DtNetReadStatus handleMsg( DtRtiMsg& msg );
00253 
00255    virtual DtNetReadStatus processMsg(const DtRtiMsg& msg);
00257    virtual DtNetReadStatus momProcessMsg(const DtRtiMsg& msg);
00258 
00261    DtFederateMgr* fedMgr();
00262 
00264    DtPartnerMgr* partnerMgr();
00265 
00269 #ifdef DtIFSPEC1516
00270    virtual int readFileDescriptor(rti1516::TransportationType transport);
00271 #elif defined(DtIFSPEC1516E)
00272    virtual int readFileDescriptor(rti1516e::TransportationType transport);
00273 #else
00274    virtual int readFileDescriptor(RTI::TransportType transport);
00275 #endif
00276 
00277 #if defined(_WIN32)
00278 
00279 
00280 #ifdef DtIFSPEC1516
00281    virtual WSAEVENT readFileEvent(rti1516::TransportationType transport);
00282 #elif defined(DtIFSPEC1516E)
00283    virtual WSAEVENT readFileEvent(rti1516e::TransportationType transport);
00284 #else
00285    virtual WSAEVENT readFileEvent(RTI::TransportType transport);
00286 #endif
00287 #endif
00288 
00290 
00291 
00292 
00293    virtual void addMsgCallback(DtRtiMsgKind msgKind, DtRtiMsgCbMgr::DtCallbackFcn fcn,
00294       void *usr, bool isMomCallback=false);
00295    virtual void removeMsgCallback(DtRtiMsgKind msgKind, DtRtiMsgCbMgr::DtCallbackFcn fcn,
00296       void *usr, bool isMomCallback=false);
00297    virtual void addWildcardMsgCallback(DtRtiMsgCbMgr::DtCallbackFcn fcn,
00298       void *usr, bool isMomCallback=false);
00299    virtual void removeWildcardMsgCallback(DtRtiMsgCbMgr::DtCallbackFcn fcn,
00300       void *usr, bool isMomCallback=false);
00302 
00308 
00309 
00312    virtual DtRtiConnection* reliableConn() const;
00313 
00315    virtual DtRtiConnection* bestEffortConn() const;
00317 
00318 
00320    virtual MAKRti::DtTransportType internalTransportType() const;
00321    
00326    virtual bool setupSelectParams(DtSelectParam* params);
00327 
00329    virtual bool hasTransport(MAKRti::DtTransportType trans);
00330 
00337    virtual DtRtiMsg* create(DtRtiMsgKind kind);
00338 
00340    virtual void setMsgFactory(DtRtiMsgFactory* fact);
00341    virtual DtRtiMsgFactory* msgFactory() const;
00342 
00344 
00345 
00346 
00347    virtual void listenToMulticastGroup(const MAKRti::DtInetAddr& addr, const MAKRti::DtInetAddr& netInterface = MAKRti::DtInetAddr::inaddrAny());
00348    virtual void dropMulticastGroup(const MAKRti::DtInetAddr& addr, const MAKRti::DtInetAddr& netInterface = MAKRti::DtInetAddr::inaddrAny());
00350 
00353    virtual void forceDropMulticastGroup(const MAKRti::DtInetAddr& addr, const MAKRti::DtInetAddr& netInterface = MAKRti::DtInetAddr::inaddrAny());
00354 
00358    virtual void connectFederation(
00359 #ifdef DtIFSPEC1516
00360       rti1516::FederateAmbassador* fedAmb,
00361 #elif defined(DtIFSPEC13)
00362       RTI::FederateAmbassador* fedAmb,
00363 #endif
00364       DtLogicalTimeFactory* logicalTimeFactoryPtr,
00365       MAKRti::DtString fedExName, 
00366       DtFederateHandle federateHandle,
00367       int fedExHandle);
00368 
00371    virtual bool repairFederationConnection();
00372 
00376    virtual void disconnectFederation();
00377 
00387 
00388 
00391    virtual bool lockServiceCall();
00392 
00395    virtual void unlockServiceCall();
00396 
00399    virtual bool serviceCallLocked();
00400 
00404    virtual bool enterServiceCall();
00405 
00408    virtual void exitServiceCall();
00409 
00412    virtual bool inServiceCall();
00414 
00416 #ifdef DtIFSPEC1516
00417    virtual rti1516::FederateAmbassador* fedAmb() const;
00418 #elif defined(DtIFSPEC1516E)
00419    virtual rti1516e::FederateAmbassador* fedAmb() const;
00420 #else
00421    virtual RTI::FederateAmbassador* fedAmb() const;
00422 #endif
00423    
00424 
00432    virtual void addFedAmbWrapper(MAKRti::DtString const& name, DtFedAmbWrapper* fedAmb);
00433 
00438    virtual bool addFedAmbWrapperAtFront( MAKRti::DtString const& name, DtFedAmbWrapper* fedAmb );
00439 
00441    virtual DtFedAmbWrapper* removeFedAmbWrapper(MAKRti::DtString const& name);
00442 
00444    virtual unsigned long connectionId() const;
00445    
00447    virtual DtFederateHandle fedHandle() const;
00448 
00450    virtual unsigned long fedExHandle() const;
00451 
00453    virtual const MAKRti::DtString& fedExName() const;
00454 
00457    virtual void setFederateHandle(DtFederateHandle handle);
00458 
00461    virtual DtLogicalTimeFactory* logicalTimeFactory(
00462       DtFederationHandle federationHandle=0) const;
00463 
00466    virtual void addLogicalTimeFactory(DtFederationHandle federationHandle,
00467       DtLogicalTimeFactory* timeFactory);
00468 
00471    virtual void removeLogicalTimeFactory(DtFederationHandle federationHandle);
00472 
00474    virtual DtRtiMsgQueue* msgQueue();
00475    virtual void setMsgQueue(DtRtiMsgQueue* msgQueuePtr);
00476 
00478    virtual DtRetractInfoList* retractList();
00479    virtual void setRetractList(DtRetractInfoList* listPtr);
00480 
00483    virtual bool wait(MAKRti::DtTime periodInSeconds, bool unlockWhileWaiting = false);
00484 
00486    virtual void yield();
00487 
00491    virtual bool saveInProgress() const;
00492    virtual void setSaveInProgress(bool saveIsInProgress);
00493 
00497    virtual bool restoreInProgress() const;
00498    virtual void setRestoreInProgress(bool saveIsInProgress);
00499 
00501    virtual bool saveRestoreInProgress() const;
00502 
00504    virtual void setMetadataControl( DtMetadataType type, bool onOff );
00505    virtual bool isMetadataEnabled( DtMetadataType type );
00506 
00508    virtual void sendShutdownForwarderMsg();
00509 
00511    virtual unsigned long sequenceNumber() const;
00512 
00514    virtual void incrementSequenceNumber();
00515 
00516 protected:
00517 
00518 
00520    virtual bool doWait(MAKRti::DtTime period);
00521 
00525    virtual int initConnections();
00526 
00529    virtual bool createBestEffortConn();
00530 
00532    virtual void destroyBestEffortConn();
00533 
00535    virtual bool createRelConn();   
00536 
00538    virtual void destroyRelConn();   
00539 
00542    virtual unsigned int createAncillaryRelConns();
00543 
00545    virtual void destroyAncillaryRelConn(DtRtiConnection* conn);
00546 
00548    virtual void destroyAncillaryRelConns();
00549 
00551    virtual unsigned int ancillaryReliableConnsCount() const;
00552 
00555    virtual bool checkRelConn();
00556 
00558    virtual void processReadResult(int readError);
00559 
00562    virtual int sendStampedUtilityFunction( DtRtiMsg* msg,                      
00563                                     MAKRti::DtTransportType transport,
00564                                     bool performDelete,
00565                                     bool isAnonymous,
00566                                     const MAKRti::DtInetAddr& addr );
00567 
00568 public:
00569  
00574    static DtConnectionMgr* create(DtRIDParameters* p, bool isFederate = false, 
00575       DtBoost::shared_ptr<DtRtiAssistantLrcClient> assistantClient = 
00576       DtBoost::shared_ptr<DtRtiAssistantLrcClient>());
00577 
00580    static void setCreatorFunction(DtConnectionMgrCreator fn);
00581 
00586    static void setInternalCreatorFunction(DtConnectionMgrCreator fn);
00587 
00588 protected:
00589 
00591    DtRtiMsgFactory* myMsgFactory;
00592    
00594    DtRtiConnection* myBestEffortConn;
00595 
00597    DtRtiConnection* myPrimaryReliableConn;
00598 
00600    typedef std::list< DtRtiConnection* >   DtRtiConnectionList;
00601    DtRtiConnectionList                     myReliableConns;
00602 
00604    DtRIDParameters* myParams;
00605 
00607    DtFederateMgr* myFedMgr;
00608 
00610    std::map<MAKRti::DtInetAddr, DtMulticastEntry*> myMulticastGroups;
00611 
00613    DtFedAmbWrapperChain myFedAmbChain;
00614 
00616    DtDfltMsgFactory myDfltMsgFactory;
00617 
00619    DtRtiMsgCbMgr myMsgCbMgr;
00620 
00622    DtRtiMsgCbMgr myMomMsgCbMgr;
00623 
00625    MAKRti::DtTransportType myInternalTransportType;
00626 
00628    bool myAddTransportTypeMetadata;
00629    bool myAddMcastMetadata;
00630 
00632    std::map<DtFederationHandle, DtLogicalTimeFactory*> myLogicalTimeFactories;
00633 
00635    DtRtiMsgQueue* myMsgQueue;
00636 
00638    DtRetractInfoList* myRetractList;
00639 
00641    std::list<DtRtiMsg*> myPendingMessages;
00642 
00644    bool mySaveInProgress;
00645 
00647    bool myRestoreInProgress;
00648 
00651    unsigned long myConnectionId;
00652 
00654    MAKRti::DtString myFedExName;
00655 
00657    DtFederateHandle myFedExHandle;
00658 
00660    DtFederateHandle myFederateHandle;
00661 
00663    unsigned long myReceivedMsgCount;
00664 
00666    unsigned long mySentMsgCount;
00667 
00669    MAKRti::DtList myWorkingMsgId;
00670 
00672    DtMessageThrottle* myMessageThrottle;
00673 
00675    bool myAllProvideUpdateRequestsDelayed;
00676 
00678    DtMutex* myCallbackMutex;
00679 
00681    unsigned int myLockService;
00682 
00684    unsigned int myInService;
00685 
00687    MAKRti::DtClock myClock;
00688 
00690    DtBoost::shared_ptr<DtRtiAssistantLrcClient> myAssistantClient;
00691 
00693    bool myIsFederate;
00694 
00695 #if defined(_WIN32)
00696 
00697    WSAEVENT myBestEffortEvent;
00698 
00700    WSAEVENT myReliableEvent;
00701 #endif
00702 
00704    unsigned long myVersionConflictCount;
00705    MAKRti::DtTime myVersionConflictNoticationTimer;
00706 
00708    unsigned long mySizeMismatchCount;
00709    MAKRti::DtTime mySizeMismatchNoticationTimer;
00710 
00711    DtPartnerMgr* myPartnerMgr;
00712 
00714    unsigned long myServiceCallCount;
00715 
00717    bool myProcessingTick;
00718 
00720    bool myEvokingCallbacks;
00721 
00723    bool myProcessingMessage;
00724 
00725 protected:
00727    static DtConnectionMgrCreator theCreator;
00728 
00730    static DtConnectionMgrCreator theInternalCreator;
00731 };
00732 
00733 
00736 class DtMulticastEntry
00737 {
00738 public:
00739    DtMulticastEntry() :
00740          addr(MAKRti::DtInetAddr::inaddrAny()),
00741          netInterface(MAKRti::DtInetAddr::inaddrAny()),
00742          count(0)
00743    {};
00744    DtMulticastEntry(
00745       MAKRti::DtInetAddr addrVal,
00746       MAKRti::DtInetAddr netInterfaceVal,
00747       int countVal=0) :
00748          addr(addrVal),
00749          netInterface(netInterfaceVal),
00750          count(countVal)
00751    {};
00752 
00754    MAKRti::DtInetAddr addr;
00755 
00757    MAKRti::DtInetAddr netInterface;
00758 
00760    int count;
00761 };
00762 
00763 #endif
00764 

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)