16 #include <vlutil/vlString.h>
17 #include <vlutil/vlUtil.h>
37 #include "mtl/fedReader13.h"
38 #include "mtl/fedReader1516.h"
39 #include "mtl/fedReader1516e.h"
52 class DtConstrainedSyncMsg;
54 class DtEnableRegulationMsg;
55 class DtEnableConstrainedMsg;
58 class DtNextEventRequestMsg;
68 class DtSaveRequestTsoMsg;
74 class DtTimeAdvanceRequestMsg;
85 #define RTINAMESPACE rti1516
86 #elif defined(DtIFSPEC1516E)
87 #define RTINAMESPACE rti1516e
94 const std::vector<unsigned int> & crcs,
96 std::string
const & timeImplName,
97 MAKRti::DtFomType fedType,
98 const DtString& momModuleName,
99 const std::vector<DtString>& fedFileName,
102 unsigned int momModuleCrc);
131 const std::vector<unsigned int> & crcs, DtString
const & fedExName,
132 std::string
const & timeImplName, MAKRti::DtFomType fedType,
133 const DtString& momModuleName,
134 const std::vector<DtString >& modules,
149 virtual const DtString& fedExName()
const;
152 virtual int fedExHandle()
const;
156 virtual const DtString& fedFileName()
const;
159 virtual const std::vector<DtString>& fomModules()
const;
162 virtual bool fullyCreated()
const;
165 virtual void setFullyCreated(
bool val);
168 virtual unsigned long creatorID()
const;
171 virtual void createDistributor(
const unsigned long initiatingFedID,
172 const DtString& momModuleName,
173 const std::vector<DtString>& fomModules );
176 virtual int numFederates()
const;
184 virtual DtFederateHandle federateHandleOfConnection(
unsigned long connId)
const;
187 virtual void disconnectFederate(
DtFederate* fed );
190 virtual bool removeFederateConnection(
unsigned long id);
197 unsigned long newConnId,
unsigned long& oldConnId);
200 virtual void reconnectFederateSucceeded(
DtFederate* fed );
203 virtual void reconnectFederateFailed(
DtFederate* fed );
215 virtual void resetClockForHeartBeat();
221 virtual void printFederates();
224 virtual void addFederateJoinedCallback(
DtFederateCbFn fn,
void* usr);
227 virtual void removeFederateJoinedCallback(
DtFederateCbFn fn,
void* usr);
230 virtual void addFederateResignedCallback(
DtFederateCbFn fn,
void* usr);
233 virtual void removeFederateResignedCallback(
DtFederateCbFn fn,
void* usr);
237 virtual void addSyncPtRegisteredCallback(
DtSyncPointCbFn fn,
void* usr);
241 virtual void removeSyncPtRegisteredCallback(
DtSyncPointCbFn fn,
void* usr);
253 virtual void addFederationSynchronizedCallback(
DtSyncPointCbFn fn,
void* usr);
257 virtual void removeFederationSynchronizedCallback(
DtSyncPointCbFn fn,
void* usr);
260 virtual void addFederateDisconnectedCallback(
DtFederateCbFn fn,
void* usr );
263 virtual void removeFederateDisconnectedCallback(
DtFederateCbFn fn,
void* usr );
266 virtual void addFederateReconnectSucceededCallback(
DtFederateCbFn fn,
void* usr );
269 virtual void removeFederateReconnectSucceededCallback(
DtFederateCbFn fn,
void* usr );
272 virtual void addFederateReconnectFailedCallback(
DtFederateCbFn fn,
void* usr );
275 virtual void removeFederateReconnectFailedCallback(
DtFederateCbFn fn,
void* usr );
284 void pushFomModuleToJoinedFederates(
DtFederate* newFederate,
286 unsigned int fileSize,
287 const char* fileBuffer );
292 unsigned int fileSize,
293 const char* fileBuffer );
309 virtual const DtTimeInfoList* regulatingFederates()
const;
312 virtual const DtTimeInfoList* constrainedFederates()
const;
316 virtual void disableNetworkTesting();
319 virtual void enableNetworkTesting();
323 bool continuous,
bool haltContinuous,
bool observing,
324 unsigned int interactionPeriod,
unsigned int numInteractions,
325 unsigned int payloadBytes );
328 virtual bool transferRidParams(
DtFederateHandle handle,
const DtString& ridString);
335 static void processJoinMsg(
const DtJoinMsg& msg,
void* usr);
337 static void processAlive(
const DtAliveMsg& msg,
void* usr);
338 static void processResign(
const DtResignMsg& msg,
void* usr);
339 static void processSyncPoint(
const DtSyncPointMsg& msg,
void* usr);
344 static void processSaveBegun(
const DtSaveBegunMsg& msg,
void* usr);
345 static void processAbortSave(
const DtAbortSaveMsg& msg,
void* usr);
351 static void processOwnership(
const DtOwnershipMsg& msg,
void* usr);
361 static void processSaveRequestTso(
const DtSaveRequestTsoMsg& msg,
void* usr);
362 static void processEnableRegulation(
const DtEnableRegulationMsg& msg,
364 static void processEnableConstrained(
const DtEnableConstrainedMsg& msg,
366 static void processTimeAdvanceRequest(
const DtTimeAdvanceRequestMsg& msg,
368 static void processDisable(
const DtDisableMsg& msg,
void* usr);
369 static void processConstrainedSync(
const DtConstrainedSyncMsg& msg,
371 static void processNextEventRequest(
const DtNextEventRequestMsg& msg,
384 const std::vector<unsigned int> & crcs,
385 DtString
const & fedExName,
386 std::string
const & timeImplName,
387 MAKRti::DtFomType fedType,
388 DtString
const& momModuleName,
389 const std::vector<DtString>& fomModules,
392 unsigned int momModuleCrc);
404 virtual const std::map< unsigned long, const std::vector<DtString>*>& joinFomModules()
const;
406 virtual const std::vector<DtString>& joinFomModulesForConnection(
unsigned long connID)
const;
409 virtual const std::vector<DtString>& createFomModules()
const;
414 virtual void processJoinMsg(
const DtJoinMsg& msg);
415 virtual bool handleJoinFailureCases(
const DtJoinMsg &msg );
416 virtual void requestFedFileUpload(
const DtJoinMsg& msg );
419 virtual void processAlive(
const DtAliveMsg& msg);
420 virtual void processResign(
const DtResignMsg& msg);
440 virtual void processEnableRegulation(
const DtEnableRegulationMsg& msg);
441 virtual void processEnableConstrained(
const DtEnableConstrainedMsg& msg);
442 virtual void processTimeAdvanceRequest(
const DtTimeAdvanceRequestMsg& msg);
443 virtual void processDisable(
const DtDisableMsg& msg);
444 virtual void processConstrainedSync(
const DtConstrainedSyncMsg& msg);
445 virtual void processSaveRequestTso(
const DtSaveRequestTsoMsg& msg);
447 virtual void processNextEventRequest(
const DtNextEventRequestMsg& msg);
462 virtual void processSyncPtAchievedCallbacks(
DtSyncPt* point,
466 virtual void processFederationSynchronizedCallbacks(
DtSyncPt* point);
471 virtual bool synchronized(
DtSyncPt* point,
482 const char* federateType,
const char* federateName,
DtFederateHandle handle,
483 unsigned long connHandle,
int astntCompId,
const char* fedHostName,
489 const char* federateType,
const char* federateName,
491 const char* fedHostname, MAKRti::DtInetAddr host,
504 virtual bool processCreateReady();
507 virtual void processJoin(
unsigned long connID,
const DtFedJoinInfo* fedInfo);
510 virtual void processJoinReady();
513 virtual void destroyDistributor();
523 virtual unsigned int numberFederatesAllowed(
unsigned int numPartners)
const;
526 virtual void resetControl();
529 virtual bool tickDistributor();
532 virtual bool processEvents();
537 DtFedReader * getReader(DtFomType theFomType);
538 DtFedReader * getReader( DtFomType theFomType,
DtFomClassMgr* target);
540 void populateWithUnknownFoms(std::vector<DtString> & mods, std::vector<DtString> & requestedMods);
541 bool isFomAvailable(
const DtString & fomName);
542 bool doesCrcMatchKnownFomModuleCrc(
const DtString & fomName,
unsigned int myTakenFomCrc );
545 virtual bool fedFileReady(
const MAKRti::DtString& fileName)
const;
548 virtual bool fedFilesReady(
const std::vector<MAKRti::DtString>* fileNames )
const;
551 virtual bool addJoinFomModuleForConnection(
unsigned long connId,
552 const std::vector<MAKRti::DtString>& modulesFromJoinRequest );
555 virtual void removeJoinFomModuleForConnection(
unsigned long connID );
560 virtual void tickSaveRestore();
564 virtual void tickJoin();
568 virtual void tickFederates();
573 virtual void sendSyncPointMsg(
577 RTINAMESPACE::VariableLengthData
const* theTag =
NULL,
581 virtual void sendResignMsg(
584 const DtTimeInfo* timeInfo );
585 virtual void sendEnableDisableNetworkTestingMsg(
586 const char* name,
bool enabled );
587 virtual void sendTransferRidParamsMsg(
589 virtual void sendJoinResponseMsg(
unsigned long destinationIDValue,
590 unsigned short requestID,
unsigned int crcOfFedFile,
DtFederateHandle handle,
591 const char* federateName,
int fedExHandle,
const char* fedExName,
592 const DtString& momModule,
const std::vector<MAKRti::DtString>& modules,
593 unsigned long flags,
bool allowNetworkTesting,
bool enableNetworkTesting,
596 const DtString& errorString = DtString::nullString());
598 virtual void sendSaveInitiateMsg(
const char* labelVal);
599 virtual void sendSaveInitiateConstrainedMsg(
const char* labelVal);
601 unsigned long requestID,
const char* labelVal,
605 char const* objectName,
bool result);
607 std::set< std::wstring >
const & objectNames,
611 RTINAMESPACE::FederateRestoreStatusVector
const & restoreStatusList);
614 RTINAMESPACE::FederateHandleSaveStatusPairVector
const & saveStatusList);
617 virtual void sendRegulationEnabledMsg(
620 virtual void sendConstrainedEnabledMsg(
627 virtual void sendNerLbtsMsg(
629 bool nerPending,
bool lagNerPending,
632 virtual void sendSyncConstrainedMsg();
636 virtual void sendSaveTimeMsg(
char const* label,
643 virtual void retireSyncPoint(
const char* name);
650 virtual void checkTimedSave();
653 virtual void initiateSave(
const char* label);
657 virtual bool save(
const char* label );
661 virtual int initializeRestore(
const char* label );
665 virtual bool restore(
const char* label );
675 virtual DtString& getSaveFileName(
const char* label, MAKRti::DtString& fileName,
676 bool extendName=
true);
680 virtual DtString& getRestoreFileName(
const char* label, MAKRti::DtString& fileName);
690 void removeRegulatingEntry(DtTimeInfo* entry);
693 virtual void checkPendingConstrained(
DtRtiApiTime const & lbts);
696 virtual void checkPendingConstrained(DtTimeInfo* entry,
701 virtual bool becomeConstrained(DtTimeInfo* entry);
705 void adjustRegulatingEntry(DtTimeInfo* entry,
708 bool isTimeAvailable);
733 virtual void destroyTempTimePool();
747 virtual bool minTimeAvailable()
const;
751 virtual bool lagTimeAvailable()
const;
766 virtual bool minNerPending()
const;
769 virtual bool lagNerPending()
const;
781 virtual int getNextFreeFedHandle();
861 typedef std::map< DtFederateHandle, DtFedExReservedNameSet >
868 DtTimeInfoList myRegulatingFederates;
869 DtTimeInfoList myConstrainedFederates;
870 DtTimeInfoList myPendingConstrained;
871 DtTimeInfoList myPendingTar;
872 DtTimeInfoList myPendingRegulation;
873 DtTimeInfoList myNerLbtsList;
874 DtTimeInfoList myNerRequested;
875 DtTimeInfoList myPendingNerResponses;
876 bool myNewNerRequestPending;
877 bool myForceNerCycle;
878 bool myTransmitLaggardLBTS;
879 DtList mySyncConstrained;
880 unsigned long myNerCycle;
883 DtList myTempTimePool;
884 std::auto_ptr<DtRtiApiTime> myPositiveInfinity;
885 std::auto_ptr<DtRtiApiTime> mySaveTime;
886 std::auto_ptr<DtRtiApiTime> myNerLbts;
887 std::auto_ptr<DtRtiApiTime> myLagNerLbts;