70 PENDING_ITERATIVE_TIME = 8,
77 PENDING_ITERATIVE_INIT = 12,
81 std::atomic<Modes> currentMode{Modes::STARTUP};
82 char nameSegmentSeparator =
'/';
84 bool strictConfigChecking{
true};
86 bool useJsonSerialization{
false};
88 bool observerMode{
false};
90 bool retriggerTimeRequest{
false};
92 bool singleThreadFederate{
false};
94 bool hasPotentialInterfaces{
false};
97 LocalFederateId fedID;
100 Time mCurrentTime = Time::minVal();
101 Time mStopTime = Time::maxVal();
105 std::unique_ptr<gmlc::libguarded::shared_guarded<AsyncFedCallInfo, std::mutex>> asyncCallInfo;
106 std::unique_ptr<ConnectorFederateManager> cManager;
108 std::unique_ptr<PotentialInterfacesManager> potManager;
109 std::atomic<int> potInterfacesSequence{0};
111 std::function<void(
Time,
Time,
bool)> timeRequestEntryCallback;
112 std::function<void(
Time,
bool)> timeUpdateCallback;
113 std::function<void(Modes, Modes)> modeUpdateCallback;
114 std::function<void(
Time,
bool)> timeRequestReturnCallback;
115 std::function<void(
bool)> initializingEntryCallback;
116 std::function<void()> executingEntryCallback;
117 std::function<void()> cosimulationTerminationCallback;
118 std::function<void(
int, std::string_view)> errorHandlerCallback;
132 const std::shared_ptr<Core>& core,
140 Federate(std::string_view fedname, CoreApp& core,
const FederateInfo& fedInfo = FederateInfo{});
144 explicit Federate(
const std::string& configString);
150 Federate(std::string_view fedname,
const std::string& configString);
154 Federate(Federate&& fed) noexcept;
166 void enterInitializingMode();
172 void enterInitializingModeAsync();
177 bool isAsyncOperationCompleted() const;
181 void enterInitializingModeComplete();
188 void enterInitializingModeIterative();
194 void enterInitializingModeIterativeAsync();
200 void enterInitializingModeIterativeComplete();
224 void finalizeAsync();
226 void finalizeComplete();
230 void processCommunication(
std::chrono::milliseconds period =
std::chrono::milliseconds(0));
233 virtual
void disconnect();
239 void localError(
int errorcode,
std::string_view message);
246 void globalError(
int errorcode,
std::string_view message);
251 void localError(
int errorcode);
256 void globalError(
int errorcode);
265 void setSeparator(
char separator) { nameSegmentSeparator = separator; }
269 Time requestTime(
Time nextInternalTimeStep);
290 void requestTimeAsync(
Time nextInternalTimeStep);
302 Time requestTimeComplete();
314 void setTag(std::string_view tag, std::string_view value);
321 const std::string& getTag(std::string_view tag)
const;
327 virtual void setProperty(int32_t option,
double timeValue);
333 virtual void setProperty(int32_t option,
Time timeValue);
339 virtual void setFlagOption(
int flag,
bool flagValue =
true);
344 virtual void setProperty(int32_t option, int32_t optionValue);
349 virtual Time getTimeProperty(int32_t option)
const;
354 virtual bool getFlagOption(
int flag)
const;
358 virtual int getIntegerProperty(int32_t option)
const;
366 void setLoggingCallback(
367 const std::function<
void(
int, std::string_view, std::string_view)>& logFunction);
376 void setInitializingEntryCallback(std::function<
void(
bool)> callback);
383 void setExecutingEntryCallback(std::function<
void()> callback);
392 void setTimeRequestEntryCallback(std::function<
void(
Time,
Time,
bool)> callback);
402 void setTimeUpdateCallback(std::function<
void(
Time,
bool)> callback);
412 void setModeUpdateCallback(std::function<
void(Modes, Modes)> callback);
421 void setTimeRequestReturnCallback(std::function<
void(
Time,
bool)> callback);
428 void setCosimulationTerminatedCallback(std::function<
void()> callback);
436 void setErrorHandlerCallback(std::function<
void(
int, std::string_view)> errorHandlerCallback);
451 std::string query(std::string_view target,
452 std::string_view queryStr,
467 std::string query(std::string_view queryStr,
481 QueryId queryAsync(std::string_view target,
482 std::string_view queryStr,
494 QueryId queryAsync(std::string_view queryStr,
506 std::string queryComplete(
QueryId queryIndex);
511 bool isQueryCompleted(
QueryId queryIndex)
const;
521 void setQueryCallback(
const std::function<std::string(std::string_view)>& queryFunction);
528 void setGlobal(std::string_view valueName, std::string_view value);
533 void addAlias(std::string_view interfaceName, std::string_view alias);
543 std::string_view target,
544 std::string_view commandStr,
551 std::pair<std::string, std::string> getCommand();
557 std::pair<std::string, std::string> waitCommand();
563 void addDependency(std::string_view fedName);
570 Filter& registerGlobalFilter(std::string_view filterName,
571 std::string_view inputType = std::string_view{},
572 std::string_view outputType = std::string_view{});
580 CloningFilter& registerGlobalCloningFilter(std::string_view filterName,
581 std::string_view inputType = std::string_view{},
582 std::string_view outputType = std::string_view{});
590 Filter& registerFilter(std::string_view filterName,
591 std::string_view inputType = std::string_view{},
592 std::string_view outputType = std::string_view{});
602 CloningFilter& registerCloningFilter(std::string_view filterName,
603 std::string_view inputType = std::string_view{},
604 std::string_view outputType = std::string_view{});
610 return registerGlobalFilter(std::string(), std::string_view{}, std::string_view{});
619 Translator& registerGlobalTranslator(std::int32_t translatorType,
620 std::string_view translatorName,
621 std::string_view endpointType = std::string_view{},
622 std::string_view units = std::string_view{});
631 Translator& registerTranslator(std::int32_t translatorType,
632 std::string_view translatorName,
633 std::string_view endpointType = std::string_view{},
634 std::string_view units = std::string_view{});
642 std::string_view endpointType = std::string_view{},
643 std::string_view units = std::string_view{})
645 return registerGlobalTranslator(0, translatorName, endpointType, units);
655 std::string_view endpointType = std::string_view{},
656 std::string_view units = std::string_view{})
658 return registerTranslator(0, translatorName, endpointType, units);
668 return registerGlobalCloningFilter(std::string(), std::string(), std::string());
674 const Filter& getFilter(std::string_view filterName)
const;
679 const Filter& getFilter(
int index)
const;
684 Filter& getFilter(std::string_view filterName);
689 Filter& getFilter(
int index);
700 [[deprecated]]
static void setFilterOperator(
Filter& filt,
701 std::shared_ptr<FilterOperator> filtOp);
704 int getFilterCount()
const;
711 const Translator& getTranslator(std::string_view translatorName)
const;
717 const Translator& getTranslator(
int index)
const;
723 Translator& getTranslator(std::string_view translatorName);
740 [[deprecated]]
static void setTranslatorOperator(
Translator& trans,
741 std::shared_ptr<TranslatorOperator> transOp);
744 int getTranslatorCount()
const;
755 void finalizeOperations();
756 void preTimeRequestOperations(
Time nextStep,
bool iterating);
757 void postTimeRequestOperations(
Time newTime,
bool iterating);
759 virtual void updateTime(
Time newTime,
Time oldTime);
762 virtual void startupToInitializeStateTransition();
765 virtual void initializeToExecuteStateTransition(
iteration_time iterate);
767 virtual void disconnectTransition();
770 virtual std::string localQuery(std::string_view queryStr)
const;
773 std::string localNameGenerator(std::string_view addition)
const;
775 void handleError(
int errorCode, std::string_view errorString,
bool noThrow);
776 void setAsyncCheck(std::function<
bool()> asyncCheck);
784 virtual void registerInterfaces(
const std::string& configString);
790 void registerConnectorInterfaces(
const std::string& configString);
798 registerConnectorInterfaces(configString);
801 auto getID() const noexcept {
return fedID; }
808 const std::string&
getName()
const {
return mName; }
816 void logMessage(
int level, std::string_view message)
const;
847 void completeOperation();
857 void updateFederateMode(Modes newMode);
859 void potentialInterfacesStartupSequence();
861 void updateSimulationTime(
Time newTime,
Time oldTime,
bool iterating);
866 void registerConnectorInterfacesJson(
const std::string& jsonString);
871 void registerConnectorInterfacesToml(
const std::string& tomlString);
876 checkValidFilterType(
bool useTypes,
FilterTypes opType,
const std::string& operation)
const;
889 mCore(core), handle(hid), mName(actName)
899 bool isValid()
const {
return handle.isValid(); }
900 bool operator<(
const Interface& inp)
const {
return (handle < inp.
handle); }
901 bool operator>(
const Interface& inp)
const {
return (handle > inp.handle); }
902 bool operator==(
const Interface& inp)
const {
return (handle == inp.handle); }
903 bool operator!=(
const Interface& inp)
const {
return (handle != inp.handle); }
909 const std::string& getName()
const;
911 [[deprecated]]
const std::string& getTarget()
const;
913 void addSourceTarget(std::string_view newTarget,
InterfaceType hint = InterfaceType::UNKNOWN);
915 void addDestinationTarget(std::string_view newTarget,
918 void removeTarget(std::string_view targetToRemove);
920 void addAlias(std::string_view alias);
922 const std::string& getInfo()
const;
924 void setInfo(std::string_view info);
930 void setTag(std::string_view tag, std::string_view value);
937 const std::string& getTag(std::string_view tag)
const;
939 virtual void setOption(int32_t option, int32_t value = 1);
942 virtual int32_t getOption(int32_t option)
const;
949 const std::string& getInjectionType()
const;
956 const std::string& getExtractionType()
const;
963 const std::string& getInjectionUnits()
const;
969 const std::string& getExtractionUnits()
const;
972 virtual const std::string& getDisplayName()
const = 0;
975 const std::string& getSourceTargets()
const;
978 const std::string& getDestinationTargets()
const;
980 std::size_t getSourceTargetCount()
const;
982 std::size_t getDestinationTargetCount()
const;
986 void disconnectFromCore();