16 #include <vlutil/vlString.h>
17 #include <vlutil/vlUtil.h>
38 #include "mtl/fedReader13.h"
39 #include "mtl/fedReader1516.h"
40 #include "mtl/fedReader1516e.h"
41 #include <mtl/fomSorter.h>
54 class DtConstrainedSyncMsg;
56 class DtEnableRegulationMsg;
57 class DtEnableConstrainedMsg;
60 class DtNextEventRequestMsg;
70 class DtSaveRequestTsoMsg;
76 class DtTimeAdvanceRequestMsg;
88 #define RTINAMESPACE rti1516
89 #elif defined(DtIFSPEC1516E)
90 #define RTINAMESPACE rti1516e
97 const std::vector<unsigned int> & crcs,
99 std::string
const & timeImplName,
100 MAKRti::DtFomType fedType,
101 const DtString& momModuleName,
102 const std::vector<DtString>& fedFileName,
105 unsigned int momModuleCrc);
137 const std::vector<unsigned int> & crcs, DtString
const & fedExName,
138 std::string
const & timeImplName, MAKRti::DtFomType fedType,
139 const DtString& momModuleName,
140 const std::vector<DtString >& modules,
155 virtual const DtString& fedExName()
const;
158 virtual int fedExHandle()
const;
162 virtual const DtString& fedFileName()
const;
165 virtual const std::vector<DtString>& fomModules()
const;
168 virtual bool fullyCreated()
const;
171 virtual void setFullyCreated(
bool val);
174 virtual unsigned long creatorID()
const;
177 virtual void createDistributor(
const unsigned long initiatingFedID,
178 const DtString& momModuleName,
179 const std::vector<DtString>& fomModules );
182 virtual int numFederates()
const;
190 virtual DtFederateHandle federateHandleOfConnection(
unsigned long connId)
const;
193 virtual void disconnectFederate(
DtFederate* fed );
196 virtual bool removeFederateConnection(
unsigned long id);
203 unsigned long newConnId,
unsigned long& oldConnId);
206 virtual void reconnectFederateSucceeded(
DtFederate* fed );
209 virtual void reconnectFederateFailed(
DtFederate* fed );
221 virtual void resetClockForHeartBeat();
227 virtual void printFederates();
230 virtual void addFederateJoinedCallback(
DtFederateCbFn fn,
void* usr);
233 virtual void removeFederateJoinedCallback(
DtFederateCbFn fn,
void* usr);
236 virtual void addFederateResignedCallback(
DtFederateCbFn fn,
void* usr);
239 virtual void removeFederateResignedCallback(
DtFederateCbFn fn,
void* usr);
243 virtual void addSyncPtRegisteredCallback(
DtSyncPointCbFn fn,
void* usr);
247 virtual void removeSyncPtRegisteredCallback(
DtSyncPointCbFn fn,
void* usr);
259 virtual void addFederationSynchronizedCallback(
DtSyncPointCbFn fn,
void* usr);
263 virtual void removeFederationSynchronizedCallback(
DtSyncPointCbFn fn,
void* usr);
266 virtual void addFederateDisconnectedCallback(
DtFederateCbFn fn,
void* usr );
269 virtual void removeFederateDisconnectedCallback(
DtFederateCbFn fn,
void* usr );
272 virtual void addFederateReconnectSucceededCallback(
DtFederateCbFn fn,
void* usr );
275 virtual void removeFederateReconnectSucceededCallback(
DtFederateCbFn fn,
void* usr );
278 virtual void addFederateReconnectFailedCallback(
DtFederateCbFn fn,
void* usr );
281 virtual void removeFederateReconnectFailedCallback(
DtFederateCbFn fn,
void* usr );
290 void pushFomModuleToJoinedFederates(
DtFederate* newFederate,
292 unsigned int fileSize,
293 const char* fileBuffer );
298 unsigned int fileSize,
299 const char* fileBuffer );
315 virtual const DtTimeInfoList* regulatingFederates()
const;
318 virtual const DtTimeInfoList* constrainedFederates()
const;
322 virtual void disableNetworkTesting();
325 virtual void enableNetworkTesting();
329 bool continuous,
bool haltContinuous,
bool observing,
330 unsigned int interactionPeriod,
unsigned int numInteractions,
331 unsigned int payloadBytes );
334 virtual bool transferRidParams(
DtFederateHandle handle,
const DtString& ridString);
341 static void processJoinMsg(
const DtJoinMsg& msg,
void* usr);
343 static void processAlive(
const DtAliveMsg& msg,
void* usr);
344 static void processResign(
const DtResignMsg& msg,
void* usr);
345 static void processSyncPoint(
const DtSyncPointMsg& msg,
void* usr);
350 static void processSaveBegun(
const DtSaveBegunMsg& msg,
void* usr);
351 static void processAbortSave(
const DtAbortSaveMsg& msg,
void* usr);
357 static void processOwnership(
const DtOwnershipMsg& msg,
void* usr);
367 static void processSaveRequestTso(
const DtSaveRequestTsoMsg& msg,
void* usr);
368 static void processEnableRegulation(
const DtEnableRegulationMsg& msg,
370 static void processEnableConstrained(
const DtEnableConstrainedMsg& msg,
372 static void processTimeAdvanceRequest(
const DtTimeAdvanceRequestMsg& msg,
374 static void processDisable(
const DtDisableMsg& msg,
void* usr);
375 static void processConstrainedSync(
const DtConstrainedSyncMsg& msg,
377 static void processNextEventRequest(
const DtNextEventRequestMsg& msg,
393 const std::vector<unsigned int> & crcs,
394 DtString
const & fedExName,
395 std::string
const & timeImplName,
396 MAKRti::DtFomType fedType,
397 DtString
const& momModuleName,
398 const std::vector<DtString>& fomModules,
401 unsigned int momModuleCrc);
413 virtual const std::map< unsigned long, std::vector<DtString>*>& joinFomModules()
const;
415 virtual std::vector<DtString>& joinFomModulesForConnection(
unsigned long connID)
const;
418 virtual const std::vector<DtString>& createFomModules()
const;
423 virtual void processJoinMsg(
const DtJoinMsg& msg);
424 virtual bool handleJoinFailureCases(
const DtJoinMsg &msg );
425 virtual void requestFedFileUpload(
const DtJoinMsg& msg );
428 virtual void processAlive(
const DtAliveMsg& msg);
429 virtual void processResign(
const DtResignMsg& msg);
449 virtual void processEnableRegulation(
const DtEnableRegulationMsg& msg);
450 virtual void processEnableConstrained(
const DtEnableConstrainedMsg& msg);
451 virtual void processTimeAdvanceRequest(
const DtTimeAdvanceRequestMsg& msg);
452 virtual void processDisable(
const DtDisableMsg& msg);
453 virtual void processConstrainedSync(
const DtConstrainedSyncMsg& msg);
454 virtual void processSaveRequestTso(
const DtSaveRequestTsoMsg& msg);
456 virtual void processNextEventRequest(
const DtNextEventRequestMsg& msg);
471 virtual void processSyncPtAchievedCallbacks(
DtSyncPt* point,
475 virtual void processFederationSynchronizedCallbacks(
DtSyncPt* point);
480 virtual bool synchronized(
DtSyncPt* point,
491 const char* federateType,
const char* federateName,
DtFederateHandle handle,
492 unsigned long connHandle,
int astntCompId,
const char* fedHostName,
498 const char* federateType,
const char* federateName,
500 const char* fedHostname, MAKRti::DtInetAddr host,
515 DtString& errorResponseString, DtFedReadStatus& status,
516 DtFomSorter* myFomSorter );
519 virtual void readJoinFoms( std::vector<DtString>& fomFiles,
521 DtFedReadStatus& status, DtFomSorter* myFomSorter );
524 virtual bool processCreateReady();
528 virtual bool processJoin(
unsigned long connID,
const DtFedJoinInfo* fedInfo);
531 virtual void processJoinReady();
534 virtual void destroyDistributor();
544 virtual unsigned int numberFederatesAllowed(
unsigned int numPartners)
const;
547 virtual void resetControl();
550 virtual bool tickDistributor();
553 virtual bool processEvents();
558 DtFedReader * getReader(DtFomType theFomType);
559 DtFedReader * getReader( DtFomType theFomType,
DtFomClassMgr* target);
561 void populateWithUnknownFoms(std::vector<DtString> & mods, std::vector<DtString> & requestedMods);
562 bool isFomAvailable(
const DtString & fomName);
563 bool doesCrcMatchKnownFomModuleCrc(
const DtString & fomName,
unsigned int myTakenFomCrc );
566 virtual bool fedFileReady(
const MAKRti::DtString& fileName)
const;
569 virtual bool fedFilesReady(
const std::vector<MAKRti::DtString>* fileNames )
const;
572 virtual bool addJoinFomModuleForConnection(
unsigned long connId,
573 const std::vector<MAKRti::DtString>& modulesFromJoinRequest );
576 virtual void removeJoinFomModuleForConnection(
unsigned long connID );
581 virtual void tickSaveRestore();
585 virtual void tickJoin();
589 virtual void tickFederates();
594 virtual void sendSyncPointMsg(
598 RTINAMESPACE::VariableLengthData
const* theTag =
NULL,
602 virtual void sendResignMsg(
605 const DtTimeInfo* timeInfo );
606 virtual void sendEnableDisableNetworkTestingMsg(
607 const char* name,
bool enabled );
608 virtual void sendTransferRidParamsMsg(
610 virtual void sendJoinResponseMsg(
unsigned long destinationIDValue,
611 unsigned short requestID,
unsigned int crcOfFedFile,
DtFederateHandle handle,
612 const char* federateName,
int fedExHandle,
const char* fedExName,
613 const DtString& momModule,
const std::vector<MAKRti::DtString>& modules,
614 unsigned long flags,
bool allowNetworkTesting,
bool enableNetworkTesting,
617 const DtString& errorString = DtString::nullString());
619 virtual void sendSaveInitiateMsg(
const char* labelVal);
620 virtual void sendSaveInitiateConstrainedMsg(
const char* labelVal);
622 unsigned long requestID,
const char* labelVal,
626 char const* objectName,
bool result);
628 std::set< std::wstring >
const & objectNames,
632 RTINAMESPACE::FederateRestoreStatusVector
const & restoreStatusList);
635 RTINAMESPACE::FederateHandleSaveStatusPairVector
const & saveStatusList);
638 virtual void sendRegulationEnabledMsg(
641 virtual void sendConstrainedEnabledMsg(
648 virtual void sendNerLbtsMsg(
650 bool nerPending,
bool lagNerPending,
653 virtual void sendSyncConstrainedMsg();
657 virtual void sendSaveTimeMsg(
char const* label,
664 virtual void retireSyncPoint(
const char* name);
671 virtual void checkTimedSave();
674 virtual void initiateSave(
const char* label);
678 virtual bool save(
const char* label );
682 virtual int initializeRestore(
const char* label );
686 virtual bool restore(
const char* label );
696 virtual DtString& getSaveFileName(
const char* label, MAKRti::DtString& fileName,
697 bool extendName=
true);
701 virtual DtString& getRestoreFileName(
const char* label, MAKRti::DtString& fileName);
711 void removeRegulatingEntry(DtTimeInfo* entry);
714 virtual void checkPendingConstrained(
DtRtiApiTime const & lbts);
717 virtual void checkPendingConstrained(DtTimeInfo* entry,
722 virtual bool becomeConstrained(DtTimeInfo* entry);
726 void adjustRegulatingEntry(DtTimeInfo* entry,
729 bool isTimeAvailable);
754 virtual void destroyTempTimePool();
768 virtual bool minTimeAvailable()
const;
772 virtual bool lagTimeAvailable()
const;
787 virtual bool minNerPending()
const;
790 virtual bool lagNerPending()
const;
805 virtual void setFederateHandleSlotInUse(
DtFederateHandle handle,
bool isInUse);
811 virtual int getNextFreeFedHandle();
896 typedef std::map< DtFederateHandle, DtFedExReservedNameSet >
903 DtTimeInfoList myRegulatingFederates;
904 DtTimeInfoList myConstrainedFederates;
905 DtTimeInfoList myPendingConstrained;
906 DtTimeInfoList myPendingTar;
907 DtTimeInfoList myPendingRegulation;
908 DtTimeInfoList myNerLbtsList;
909 DtTimeInfoList myNerRequested;
910 DtTimeInfoList myPendingNerResponses;
911 bool myNewNerRequestPending;
912 bool myForceNerCycle;
914 bool myTransmitLaggardLBTS;
915 DtList mySyncConstrained;
916 unsigned long myNerCycle;
919 DtList myTempTimePool;
920 std::auto_ptr<DtRtiApiTime> myPositiveInfinity;
921 std::auto_ptr<DtRtiApiTime> mySaveTime;
922 std::auto_ptr<DtRtiApiTime> myNerLbts;
923 std::auto_ptr<DtRtiApiTime> myLagNerLbts;