![]() |
MAK RTIspy API Documentation for HLA Evolved
|
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