MAK RTIspy API Documentation for HLA Evolved
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
connectMgr.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 1998 MaK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 /*********************************************************************
6 ** $RCSfile: connectMgr.h,v $ $Revision: 1.78 $ $State: Exp $
7 *********************************************************************/
8 
9 #ifndef connectMgr_H_
10 #define connectMgr_H_
11 
14 
15 
16 #include "rtiMsConfig.h"
17 #include <vlutil/vlFedTarget.h>
18 #include <vlutil/vlMutex.h>
19 #include <vlutil/vlStringUtil.h>
20 #include <vlutil/vlLockfreeMpmcQueue.h>
21 #include "RIDparams.h"
22 #include "rtiMsgCbMgr.h"
23 #include "rtiMsgFact.h"
24 #include "fedWrapChain.h"
25 #include "dfltMsgFact.h"
26 #include "connection.h"
27 #include "metadata.h"
28 
29 class DtRetractInfoList;
30 class DtRtiMsg;
31 class DtRtiConnection;
32 class DtFedAmbWrapper;
33 class DtRtiMsgQueue;
35 class DtMessageThrottle;
36 class DtFederateMgr;
37 class DtMulticastEntry;
40 
41 #ifdef DtIFSPEC1516E
42 namespace rti1516e
43 {
44  class FederateAmbassador;
45 }
46 #endif
47 
48 
49 typedef MAKRti::DtLockfreeMpmcQueue<DtRtiMsg*> DtMessageQueueType;
50 
61 {
62 public:
64  typedef DtConnectionMgr*
65  (*DtConnectionMgrCreator)(DtRIDParameters* p, bool isFederate,
66  DtBoost::shared_ptr<DtRtiAssistantLrcClient> assistantClient);
67 
68 protected:
69 
71  DtConnectionMgr(DtRIDParameters* params, bool isFederate = false,
72  DtBoost::shared_ptr<DtRtiAssistantLrcClient> assistantClient =
73  DtBoost::shared_ptr<DtRtiAssistantLrcClient>());
74 
75 public:
76 
78  virtual ~DtConnectionMgr();
79 
80 private:
81 
84 
86  DtConnectionMgr& operator= (DtConnectionMgr const& );
87 
88 public:
89 
93  virtual int init(DtRIDParameters* params);
94 
97  virtual void initParams(DtRIDParameters* params);
98 
100  virtual void enableSmartForwarding(bool enableSmartForwarding, bool enableInternalMessageSmartForwarding, int maxNumFederates);
101 
103  virtual DtRIDParameters* params();
104 
106  virtual void setFederateMgr( DtFederateMgr* fedMgrPtr );
107 
109  virtual void shutdown();
110 
112  virtual bool isShuttingDown();
113 
114 #ifdef DtIFSPEC1516E
115 
116  virtual void setFederateAmbassador( rti1516e::FederateAmbassador* fedAmb );
117 #endif
118 
120 
123  virtual int send(const DtRtiMsg& msg,
124  MAKRti::DtTransportType transport,
125  const MAKRti::DtInetAddr& addr = MAKRti::DtInetAddr::inaddrAny());
126 
129  virtual int sendStamped(const DtRtiMsg& msg,
130  MAKRti::DtTransportType transport,
131  const MAKRti::DtInetAddr& = MAKRti::DtInetAddr::inaddrAny());
132 
135  virtual int sendStampedAnonymous(const DtRtiMsg& msg,
136  MAKRti::DtTransportType transport,
137  const MAKRti::DtInetAddr& addr = MAKRti::DtInetAddr::inaddrAny());
138 
141  virtual int sendAndDelete(DtRtiMsg* msg,
142  MAKRti::DtTransportType transport,
143  const MAKRti::DtInetAddr& addr = MAKRti::DtInetAddr::inaddrAny());
144 
147  virtual int sendDirectedAndDelete(DtRtiMsg* msg,
148  MAKRti::DtTransportType transport, DtFederateHandle fedHandle,
149  const MAKRti::DtInetAddr& addr = MAKRti::DtInetAddr::inaddrAny());
150 
153  virtual int sendStampedAndDelete(DtRtiMsg* msg,
154  MAKRti::DtTransportType transport,
155  const MAKRti::DtInetAddr& = MAKRti::DtInetAddr::inaddrAny());
156 
161  virtual int sendDirectedStampedAndDelete(DtRtiMsg* msg,
162  MAKRti::DtTransportType transport, DtFederateHandle fedHandle,
163  const MAKRti::DtInetAddr& = MAKRti::DtInetAddr::inaddrAny());
164  virtual int sendDirectedStampedAndDelete(DtRtiMsg* msg,
165  MAKRti::DtTransportType transport, DtBitMask *sendMask,
166  const MAKRti::DtInetAddr& = MAKRti::DtInetAddr::inaddrAny());
168 
172  virtual int sendStampedAnonymousAndDelete(DtRtiMsg* msg,
173  MAKRti::DtTransportType transport,
174  const MAKRti::DtInetAddr& addr = MAKRti::DtInetAddr::inaddrAny());
175  virtual int sendDirectedStampedAnonymousAndDelete(DtRtiMsg* msg,
176  MAKRti::DtTransportType transport, DtFederateHandle fedHandle,
177  const MAKRti::DtInetAddr& addr = MAKRti::DtInetAddr::inaddrAny());
179 
184  virtual void sendLoopback(DtRtiMsg* msg);
185 
188  virtual bool flush();
189 
192  virtual bool drainBacklog( MAKRti::DtTime timeout = 0.0 );
193 
197  virtual void activateTransmitDelay();
198 
200  virtual bool delayTransmit() const;
201 
208  virtual void testTransmitDelay();
209 
213  virtual void activateAutoProvideDelay();
214 
216  virtual bool delayAutoProvide() const;
217 
219  bool allProvideUpdateRequestsDelayed() const;
220 
223  virtual void testAutoProvideDelay();
224 
226  virtual void processThrottledMessages();
227 
229  virtual void flushThrottledMessages();
230 
233  virtual unsigned long incrementServiceCallCount();
234 
236  virtual unsigned long serviceCallCount() const;
237 
239 
240  virtual void setProcessingTick(bool processingTick);
241  virtual bool processingTick() const;
243 
245 
246  virtual void setEvokingCallbacks(bool evokingCbs);
247  virtual bool evokingCallbacks() const;
249 
251 
254  virtual bool tick();
255 
256  virtual bool processConnectionsInCallback();
257 
260  virtual bool processConnection( DtRtiConnection* conn,
261  MAKRti::DtTransportType trans);
262 
265  virtual bool processConnections();
266 
269  virtual DtRtiMsg* getMessage();
270 
272 
273 
274  virtual void addPendingMsg(DtRtiMsg* msg);
275  virtual bool processPendingMsg();
276  virtual DtRtiMsg* nextPendingMsg();
277  virtual void emptyPendingMsgList();
278  inline bool isPendingMsgQueueEmpty()
279  {
280  return myPendingMessages.empty();
281  }
283 
285  virtual void updateBufferSizes();
286 
289  virtual DtNetReadStatus handleMsg( DtRtiMsg& msg );
290 
292  virtual DtNetReadStatus processMsg(const DtRtiMsg& msg);
294  virtual DtNetReadStatus momProcessMsg(const DtRtiMsg& msg);
295 
298  DtFederateMgr* fedMgr();
299 
301  DtPartnerMgr* partnerMgr();
302 
306 #ifdef DtIFSPEC1516
307  virtual int readFileDescriptor(rti1516::TransportationType transport);
308 #elif defined(DtIFSPEC1516E)
309  virtual int readFileDescriptor(rti1516e::TransportationType transport);
310 #else
311  virtual int readFileDescriptor(RTI::TransportType transport);
312 #endif
313 
314 #if defined(_WIN32)
315 
316 
317 #ifdef DtIFSPEC1516
318  virtual WSAEVENT readFileEvent(rti1516::TransportationType transport);
319 #elif defined(DtIFSPEC1516E)
320  virtual WSAEVENT readFileEvent(rti1516e::TransportationType transport);
321 #else
322  virtual WSAEVENT readFileEvent(RTI::TransportType transport);
323 #endif
324 #endif
325 
327 
328 
329 
330  virtual void addMsgCallback(DtRtiMsgKind msgKind, DtRtiMsgCbMgr::DtCallbackFcn fcn,
331  void *usr, bool isMomCallback=false);
332  virtual void removeMsgCallback(DtRtiMsgKind msgKind, DtRtiMsgCbMgr::DtCallbackFcn fcn,
333  void *usr, bool isMomCallback=false);
334  virtual void addWildcardMsgCallback(DtRtiMsgCbMgr::DtCallbackFcn fcn,
335  void *usr, bool isMomCallback=false);
336  virtual void removeWildcardMsgCallback(DtRtiMsgCbMgr::DtCallbackFcn fcn,
337  void *usr, bool isMomCallback=false);
339 
345 
346 
349  virtual DtRtiConnection* reliableConn() const;
350 
352  virtual DtRtiConnection* bestEffortConn() const;
354 
355 
357  virtual MAKRti::DtTransportType internalTransportType() const;
358 
363  virtual bool setupSelectParams(DtSelectParam* params);
364 
366  virtual bool hasTransport(MAKRti::DtTransportType trans);
367 
374  virtual DtRtiMsg* create(DtRtiMsgKind kind);
375 
377  virtual void setMsgFactory(DtRtiMsgFactory* fact);
378  virtual DtRtiMsgFactory* msgFactory() const;
379 
381 
382 
383 
384  virtual void listenToMulticastGroup(const MAKRti::DtInetAddr& addr, const MAKRti::DtInetAddr& netInterface = MAKRti::DtInetAddr::inaddrAny());
385  virtual void dropMulticastGroup(const MAKRti::DtInetAddr& addr, const MAKRti::DtInetAddr& netInterface = MAKRti::DtInetAddr::inaddrAny());
387 
390  virtual void forceDropMulticastGroup(const MAKRti::DtInetAddr& addr, const MAKRti::DtInetAddr& netInterface = MAKRti::DtInetAddr::inaddrAny());
391 
395  virtual void connectFederation(
396 #ifdef DtIFSPEC1516
397  rti1516::FederateAmbassador* fedAmb,
398 #elif defined(DtIFSPEC13)
399  RTI::FederateAmbassador* fedAmb,
400 #endif
401  DtLogicalTimeFactory* logicalTimeFactoryPtr,
402  MAKRti::DtString fedExName,
403  DtFederateHandle federateHandle,
404  int fedExHandle);
405 
408  virtual bool repairFederationConnection();
409 
413  virtual void disconnectFederation();
414 
424 
425 
428  virtual bool lockServiceCall();
429 
432  virtual void unlockServiceCall();
433 
436  virtual bool serviceCallLocked();
437 
441  virtual bool enterServiceCall();
442 
445  virtual void exitServiceCall();
446 
449  virtual bool inServiceCall();
451 
453 #ifdef DtIFSPEC1516
454  virtual rti1516::FederateAmbassador* fedAmb() const;
455 #elif defined(DtIFSPEC1516E)
456  virtual rti1516e::FederateAmbassador* fedAmb() const;
457 #else
458  virtual RTI::FederateAmbassador* fedAmb() const;
459 #endif
460 
461 
469  virtual void addFedAmbWrapper(MAKRti::DtString const& name, DtFedAmbWrapper* fedAmb);
470 
475  virtual bool addFedAmbWrapperAtFront( MAKRti::DtString const& name, DtFedAmbWrapper* fedAmb );
476 
478  virtual DtFedAmbWrapper* removeFedAmbWrapper(MAKRti::DtString const& name);
479 
481  virtual unsigned long connectionId() const;
482 
484  virtual DtFederateHandle fedHandle() const;
485 
487  virtual unsigned long fedExHandle() const;
488 
490  virtual const MAKRti::DtString& fedExName() const;
491 
494  virtual void setFederateHandle(DtFederateHandle handle);
495 
498  virtual DtLogicalTimeFactory* logicalTimeFactory(
499  DtFederationHandle federationHandle=0) const;
500 
503  virtual void addLogicalTimeFactory(DtFederationHandle federationHandle,
504  DtLogicalTimeFactory* timeFactory);
505 
508  virtual void removeLogicalTimeFactory(DtFederationHandle federationHandle);
509 
511  virtual DtRtiMsgQueue* msgQueue();
512  virtual void setMsgQueue(DtRtiMsgQueue* msgQueuePtr);
513 
515  virtual DtRetractInfoList* retractList();
516  virtual void setRetractList(DtRetractInfoList* listPtr);
517 
520  virtual bool wait(MAKRti::DtTime periodInSeconds, bool unlockWhileWaiting = false);
521 
523  virtual void yield();
524 
528  virtual bool saveInProgress() const;
529  virtual void setSaveInProgress(bool saveIsInProgress);
530 
534  virtual bool restoreInProgress() const;
535  virtual void setRestoreInProgress(bool saveIsInProgress);
536 
538  virtual bool saveRestoreInProgress() const;
539 
541  virtual void setMetadataControl( DtMetadataType type, bool onOff );
542  virtual bool isMetadataEnabled( DtMetadataType type );
543 
545  virtual void sendShutdownForwarderMsg();
546 
548  virtual unsigned long sequenceNumber() const;
549 
551  virtual void incrementSequenceNumber();
552 
553 protected:
554 
555 
557  virtual bool doWait(MAKRti::DtTime period);
558 
562  virtual int initConnections();
563 
566  virtual bool createBestEffortConn();
567 
569  virtual void destroyBestEffortConn();
570 
572  virtual bool createRelConn();
573 
575  virtual void destroyRelConn();
576 
579  virtual unsigned int createAncillaryRelConns();
580 
582  virtual void destroyAncillaryRelConn(DtRtiConnection* conn);
583 
585  virtual void destroyAncillaryRelConns();
586 
588  virtual unsigned int ancillaryReliableConnsCount() const;
589 
592  virtual bool checkRelConn();
593 
595  virtual void processReadResult(int readError);
596 
599  virtual int sendStampedUtilityFunction( DtRtiMsg* msg,
600  MAKRti::DtTransportType transport,
601  bool performDelete,
602  bool isAnonymous,
603  const MAKRti::DtInetAddr& addr );
604 
605 public:
606 
611  static DtConnectionMgr* create(DtRIDParameters* p, bool isFederate = false,
612  DtBoost::shared_ptr<DtRtiAssistantLrcClient> assistantClient =
613  DtBoost::shared_ptr<DtRtiAssistantLrcClient>());
614 
617  static void setCreatorFunction(DtConnectionMgrCreator fn);
618 
623  static void setInternalCreatorFunction(DtConnectionMgrCreator fn);
624 
625 protected:
626 
629 
632 
635 
637  typedef std::list< DtRtiConnection* > DtRtiConnectionList;
639 
642 
645 
647  std::map<MAKRti::DtInetAddr, DtMulticastEntry*> myMulticastGroups;
648 
651 
654 
657 
660 
662  MAKRti::DtTransportType myInternalTransportType;
663 
667 
669  std::map<DtFederationHandle, DtLogicalTimeFactory*> myLogicalTimeFactories;
670 
673 
676 
679 
682 
685 
688  unsigned long myConnectionId;
689 
691  MAKRti::DtString myFedExName;
692 
695 
698 
700  unsigned long myReceivedMsgCount;
701 
703  unsigned long mySentMsgCount;
704 
706  MAKRti::DtList myWorkingMsgId;
707 
710 
713 
715  DtMutex* myCallbackMutex;
716 
718  unsigned int myLockService;
719 
721  unsigned int myInService;
722 
724  MAKRti::DtClock myClock;
725 
727  DtBoost::shared_ptr<DtRtiAssistantLrcClient> myAssistantClient;
728 
731 
732 #if defined(_WIN32)
733 
734  WSAEVENT myBestEffortEvent;
735 
737  WSAEVENT myReliableEvent;
738 #endif
739 
741  unsigned long myVersionConflictCount;
743 
745  unsigned long mySizeMismatchCount;
747 
749 
751  unsigned long myServiceCallCount;
752 
755 
758 
761 
764 
769 
770 protected:
772  static DtConnectionMgrCreator theCreator;
773 
775  static DtConnectionMgrCreator theInternalCreator;
776  unsigned long myTickCount;
777 };
778 
779 
783 {
784 public:
786  addr(MAKRti::DtInetAddr::inaddrAny()),
787  netInterface(MAKRti::DtInetAddr::inaddrAny()),
788  count(0)
789  {};
791  MAKRti::DtInetAddr addrVal,
792  MAKRti::DtInetAddr netInterfaceVal,
793  int countVal=0) :
794  addr(addrVal),
795  netInterface(netInterfaceVal),
796  count(countVal)
797  {};
798 
800  MAKRti::DtInetAddr addr;
801 
803  MAKRti::DtInetAddr netInterface;
804 
806  int count;
807 };
808 
809 #endif
810 

Document ID: Generated on Mon Jul 9 10:30:41 EDT 2018 from SVN revision 190224
Copyright © 2005-2018 VT MÄK Inc. All Rights Reserved (www.mak.com)