16 #include <vlutil/vlString.h>
17 #include <vlutil/vlUtil.h>
36 #include "mtl/fedReader13.h"
37 #include "mtl/fedReader1516.h"
38 #include "mtl/fedReader1516e.h"
51 class DtConstrainedSyncMsg;
53 class DtEnableRegulationMsg;
54 class DtEnableConstrainedMsg;
57 class DtNextEventRequestMsg;
67 class DtSaveRequestTsoMsg;
73 class DtTimeAdvanceRequestMsg;
74 class DtReserveNameMsg;
84 #define RTINAMESPACE rti1516
85 #elif defined(DtIFSPEC1516E)
86 #define RTINAMESPACE rti1516e
93 const std::vector<unsigned int> & crcs,
95 std::string
const & timeImplName,
96 MAKRti::DtFomType fedType,
97 const DtString& momModuleName,
101 unsigned int momModuleCrc);
130 const std::vector<unsigned int> & crcs, DtString
const & fedExName,
131 std::string
const & timeImplName, MAKRti::DtFomType fedType,
132 const DtString& momModuleName,
133 const std::vector<DtString >& modules,
148 virtual const DtString& fedExName()
const;
151 virtual int fedExHandle()
const;
158 virtual const std::vector<DtString>& fomModules()
const;
161 virtual bool fullyCreated()
const;
164 virtual void setFullyCreated(
bool val);
167 virtual unsigned long creatorID()
const;
170 virtual void createDistributor(
const unsigned long initiatingFedID,
171 const DtString& momModuleName,
172 const std::vector<DtString>& fomModules );
183 virtual DtFederateHandle federateHandleOfConnection(
unsigned long connId)
const;
186 virtual void disconnectFederate(
DtFederate* fed );
189 virtual bool removeFederateConnection(
unsigned long id);
196 unsigned long newConnId,
unsigned long& oldConnId);
199 virtual void reconnectFederateSucceeded(
DtFederate* fed );
202 virtual void reconnectFederateFailed(
DtFederate* fed );
214 virtual void resetClockForHeartBeat();
220 virtual void printFederates();
223 virtual void addFederateJoinedCallback(
DtFederateCbFn fn,
void* usr);
226 virtual void removeFederateJoinedCallback(
DtFederateCbFn fn,
void* usr);
229 virtual void addFederateResignedCallback(
DtFederateCbFn fn,
void* usr);
232 virtual void removeFederateResignedCallback(
DtFederateCbFn fn,
void* usr);
236 virtual void addSyncPtRegisteredCallback(
DtSyncPointCbFn fn,
void* usr);
240 virtual void removeSyncPtRegisteredCallback(
DtSyncPointCbFn fn,
void* usr);
252 virtual void addFederationSynchronizedCallback(
DtSyncPointCbFn fn,
void* usr);
256 virtual void removeFederationSynchronizedCallback(
DtSyncPointCbFn fn,
void* usr);
259 virtual void addFederateDisconnectedCallback(
DtFederateCbFn fn,
void* usr );
262 virtual void removeFederateDisconnectedCallback(
DtFederateCbFn fn,
void* usr );
265 virtual void addFederateReconnectSucceededCallback(
DtFederateCbFn fn,
void* usr );
268 virtual void removeFederateReconnectSucceededCallback(
DtFederateCbFn fn,
void* usr );
271 virtual void addFederateReconnectFailedCallback(
DtFederateCbFn fn,
void* usr );
274 virtual void removeFederateReconnectFailedCallback(
DtFederateCbFn fn,
void* usr );
283 void pushFomModuleToJoinedFederates(
DtFederate* newFederate,
285 unsigned int fileSize,
286 const char* fileBuffer );
291 unsigned int fileSize,
292 const char* fileBuffer );
308 virtual const DtTimeInfoList* regulatingFederates()
const;
311 virtual const DtTimeInfoList* constrainedFederates()
const;
315 virtual void disableNetworkTesting();
322 bool continuous,
bool haltContinuous,
bool observing,
323 unsigned int interactionPeriod,
unsigned int numInteractions,
324 unsigned int payloadBytes );
327 virtual bool transferRidParams(
DtFederateHandle handle,
const DtString& ridString);
334 static void processJoinMsg(
const DtJoinMsg& msg,
void* usr);
336 static void processAlive(
const DtAliveMsg& msg,
void* usr);
337 static void processResign(
const DtResignMsg& msg,
void* usr);
338 static void processSyncPoint(
const DtSyncPointMsg& msg,
void* usr);
343 static void processSaveBegun(
const DtSaveBegunMsg& msg,
void* usr);
344 static void processAbortSave(
const DtAbortSaveMsg& msg,
void* usr);
350 static void processOwnership(
const DtOwnershipMsg& msg,
void* usr);
351 static void processReserveName(DtReserveNameMsg
const& msg,
void* usr);
360 static void processSaveRequestTso(
const DtSaveRequestTsoMsg& msg,
void* usr);
361 static void processEnableRegulation(
const DtEnableRegulationMsg& msg,
363 static void processEnableConstrained(
const DtEnableConstrainedMsg& msg,
365 static void processTimeAdvanceRequest(
const DtTimeAdvanceRequestMsg& msg,
367 static void processDisable(
const DtDisableMsg& msg,
void* usr);
368 static void processConstrainedSync(
const DtConstrainedSyncMsg& msg,
370 static void processNextEventRequest(
const DtNextEventRequestMsg& msg,
383 const std::vector<unsigned int> & crcs,
384 DtString
const & fedExName,
385 std::string
const & timeImplName,
386 MAKRti::DtFomType fedType,
387 DtString
const& momModuleName,
388 const std::vector<DtString>& fomModules,
391 unsigned int momModuleCrc);
403 virtual const std::map< unsigned long, const std::vector<DtString>*>& joinFomModules()
const;
405 virtual const std::vector<DtString>& joinFomModulesForConnection(
unsigned long connID)
const;
408 virtual const std::vector<DtString>& createFomModules()
const;
413 virtual void processJoinMsg(
const DtJoinMsg& msg);
414 virtual bool handleJoinFailureCases(
const DtJoinMsg &msg );
415 virtual void requestFedFileUpload(
const DtJoinMsg& msg );
418 virtual void processAlive(
const DtAliveMsg& msg);
419 virtual void processResign(
const DtResignMsg& msg);
432 virtual void processReserveName(DtReserveNameMsg
const& msg);
439 virtual void processEnableRegulation(
const DtEnableRegulationMsg& msg);
440 virtual void processEnableConstrained(
const DtEnableConstrainedMsg& msg);
441 virtual void processTimeAdvanceRequest(
const DtTimeAdvanceRequestMsg& msg);
442 virtual void processDisable(
const DtDisableMsg& msg);
443 virtual void processConstrainedSync(
const DtConstrainedSyncMsg& msg);
444 virtual void processSaveRequestTso(
const DtSaveRequestTsoMsg& msg);
446 virtual void processNextEventRequest(
const DtNextEventRequestMsg& msg);
461 virtual void processSyncPtAchievedCallbacks(
DtSyncPt* point,
465 virtual void processFederationSynchronizedCallbacks(
DtSyncPt* point);
470 virtual bool synchronized(
DtSyncPt* point,
481 const char* federateType,
const char* federateName,
DtFederateHandle handle,
482 unsigned long connHandle,
int astntCompId,
const char* fedHostName,
488 const char* federateType,
const char* federateName,
490 const char* fedHostname, MAKRti::DtInetAddr host,
503 virtual bool processCreateReady();
506 virtual void processJoin(
unsigned long connID,
const DtFedJoinInfo* fedInfo);
509 virtual void processJoinReady();
512 virtual void destroyDistributor();
522 virtual unsigned int numberFederatesAllowed(
unsigned int numPartners)
const;
525 virtual void resetControl();
528 virtual bool tickDistributor();
531 virtual bool processEvents();
536 DtFedReader * getReader(DtFomType theFomType);
537 DtFedReader * getReader( DtFomType theFomType,
DtFomClassMgr* target);
539 void populateWithUnknownFoms(std::vector<DtString> & mods, std::vector<DtString> & requestedMods);
540 bool isFomAvailable(
const DtString & fomName);
541 bool doesCrcMatchKnownFomModuleCrc(
const DtString & fomName,
unsigned int myTakenFomCrc );
544 virtual bool fedFileReady(
const MAKRti::DtString& fileName)
const;
547 virtual bool fedFilesReady(
const std::vector<MAKRti::DtString>* fileNames )
const;
550 virtual bool addJoinFomModuleForConnection(
unsigned long connId,
551 const std::vector<MAKRti::DtString>& modulesFromJoinRequest );
554 virtual void removeJoinFomModuleForConnection(
unsigned long connID );
559 virtual void tickSaveRestore();
563 virtual void tickJoin();
567 virtual void tickFederates();
572 virtual void sendSyncPointMsg(
576 RTINAMESPACE::VariableLengthData
const* theTag =
NULL,
580 virtual void sendResignMsg(
583 const DtTimeInfo* timeInfo );
584 virtual void sendEnableDisableNetworkTestingMsg(
585 const char* name,
bool enabled );
586 virtual void sendTransferRidParamsMsg(
588 virtual void sendJoinResponseMsg(
unsigned long destinationIDValue,
589 unsigned short requestID,
unsigned int crcOfFedFile,
DtFederateHandle handle,
590 const char* federateName,
int fedExHandle,
const char* fedExName,
591 const DtString& momModule,
const std::vector<MAKRti::DtString>& modules,
592 unsigned long flags,
bool allowNetworkTesting,
bool enableNetworkTesting,
595 const DtString& errorString = DtString::nullString());
596 virtual void sendSaveInitiateMsg(
const char* labelVal);
597 virtual void sendSaveInitiateConstrainedMsg(
const char* labelVal);
599 unsigned long requestID,
const char* labelVal,
603 char const* objectName,
bool result);
605 std::set< std::wstring >
const & objectNames,
615 virtual void sendRegulationEnabledMsg(
618 virtual void sendConstrainedEnabledMsg(
625 virtual void sendNerLbtsMsg(
627 bool nerPending,
bool lagNerPending,
630 virtual void sendSyncConstrainedMsg();
634 virtual void sendSaveTimeMsg(
char const* label,
641 virtual void retireSyncPoint(
const char* name);
648 virtual void checkTimedSave();
651 virtual void initiateSave(
const char* label);
655 virtual bool save(
const char* label );
659 virtual int initializeRestore(
const char* label );
663 virtual bool restore(
const char* label );
673 virtual DtString& getSaveFileName(
const char* label, MAKRti::DtString& fileName,
674 bool extendName=
true);
678 virtual DtString& getRestoreFileName(
const char* label, MAKRti::DtString& fileName);
688 void removeRegulatingEntry(DtTimeInfo* entry);
691 virtual void checkPendingConstrained(
DtRtiApiTime const & lbts);
694 virtual void checkPendingConstrained(DtTimeInfo* entry,
699 virtual bool becomeConstrained(DtTimeInfo* entry);
703 void adjustRegulatingEntry(DtTimeInfo* entry,
706 bool isTimeAvailable);
731 virtual void destroyTempTimePool();
745 virtual bool minTimeAvailable()
const;
749 virtual bool lagTimeAvailable()
const;
761 virtual bool minNerPending()
const;
764 virtual bool lagNerPending()
const;
776 virtual int getNextFreeFedHandle();
856 typedef std::map< DtFederateHandle, DtFedExReservedNameSet >
863 DtTimeInfoList myRegulatingFederates;
864 DtTimeInfoList myConstrainedFederates;
865 DtTimeInfoList myPendingConstrained;
866 DtTimeInfoList myPendingTar;
867 DtTimeInfoList myPendingRegulation;
868 DtTimeInfoList myNerLbtsList;
869 DtTimeInfoList myNerRequested;
870 DtTimeInfoList myNerPending;
871 bool myNewNerRequestPending;
872 bool myForceNerCycle;
873 bool myTransmitLaggardLBTS;
874 DtList mySyncConstrained;
875 unsigned long myNerCycle;
877 DtList myTempTimePool;
878 std::auto_ptr<DtRtiApiTime> myPositiveInfinity;
879 std::auto_ptr<DtRtiApiTime> mySaveTime;
880 std::auto_ptr<DtRtiApiTime> myNerLbts;
881 std::auto_ptr<DtRtiApiTime> myLagNerLbts;