 |
helics
3.3.0
|
9 #include "../common/GuardedTypes.hpp"
10 #include "ActionMessage.hpp"
11 #include "BasicHandleInfo.hpp"
15 #include "gmlc/containers/BlockingQueue.hpp"
29 class SubscriptionInfo;
30 class PublicationInfo;
34 class CoreFederateInfo;
36 class TimeCoordinator;
40 constexpr
Time startupTime = Time::minVal();
41 constexpr
Time initialTime{-1000000.0};
60 const std::string name;
61 std::unique_ptr<TimeCoordinator> timeCoord;
69 std::atomic<FederateStates> state{
70 FederateStates::CREATED};
71 bool only_transmit_on_change{
false};
75 bool source_only{
false};
76 bool ignore_time_mismatch_warnings{
false};
79 bool strict_input_type_checking{
false};
80 bool ignore_unit_mismatch{
false};
81 bool slow_responding{
false};
83 InterfaceInfo interfaceInformation;
84 std::unique_ptr<LogManager> mLogManager;
91 bool wait_for_current_time{
false};
93 bool mProfilerActive{
false};
96 bool mLocalProfileCapture{
false};
98 CommonCore* parent_{
nullptr};
99 std::string errorString;
101 decltype(std::chrono::steady_clock::now()) start_clock_time;
105 std::int32_t realTimeTimerIndex{-1};
106 std::int32_t grantTimeoutTimeIndex{-1};
111 std::atomic<bool> requestingMode{
false};
114 bool iterating{
false};
115 bool timeGranted_mode{
false};
116 bool terminate_on_error{
false};
122 std::uint32_t mGrantCount{0};
124 std::shared_ptr<MessageTimer> mTimer;
126 gmlc::containers::BlockingQueue<ActionMessage> queue;
128 gmlc::containers::BlockingQueue<std::pair<std::string, std::string>> commandQueue;
130 std::atomic<uint16_t> interfaceFlags{0};
132 std::map<GlobalFederateId, std::deque<ActionMessage>> delayQueues;
133 std::vector<InterfaceHandle> events;
134 std::vector<InterfaceHandle> eventMessages;
135 std::vector<GlobalFederateId> delayedFederates;
136 Time time_granted{startupTime};
137 Time allowed_send_time{startupTime};
138 mutable std::atomic_flag processing = ATOMIC_FLAG_INIT;
141 std::function<std::string(std::string_view)> queryCallback;
143 std::vector<std::pair<std::string, std::string>> tags;
144 std::atomic<bool> queueProcessing{
false};
146 Time nextValueTime()
const;
148 Time nextMessageTime()
const;
154 bool messageShouldBeDelayed(
const ActionMessage& cmd)
const;
156 void addFederateToDelay(GlobalFederateId
id);
158 void generateConfig(Json::Value& base)
const;
194 uint32_t* inputIndex);
216 void setProperty(
int intProperty,
int propertyVal);
238 while (processing.test_and_set()) {
245 if (!processing.test_and_set()) {
249 for (
int ii = 0; ii < 10000; ++ii) {
250 if (!processing.test_and_set()) {
254 while (processing.test_and_set()) {
255 std::this_thread::yield();
262 bool try_lock()
const {
return !processing.test_and_set(); }
264 void unlock()
const { processing.clear(); }
269 void setTag(std::string_view tag, std::string_view value);
271 const std::string&
getTag(std::string_view tag)
const;
273 const std::pair<std::string, std::string>&
getTagByIndex(
size_t index)
const
309 void fillEventVectorUpTo(
Time currentTime);
313 void fillEventVectorInclusive(
Time currentTime);
317 void fillEventVectorNextIteration(
Time currentTime);
323 int checkInterfaces();
325 std::
string processQueryActual(std::string_view query) const;
329 void generateProfilingMessage(
bool enterHelicsCode);
331 void generateProfilingMarker();
333 void updateMaxLogLevel();
342 const std::vector<InterfaceHandle>&
getEvents()
const;
383 std::vector<std::pair<GlobalHandle, std::string_view>>
413 std::string_view logMessageSource,
414 std::string_view message,
415 bool fromRemote =
false)
const;
421 void setLogger(std::function<
void(
int, std::string_view, std::string_view)> logFunction);
428 queryCallback = std::move(queryCallbackFunction);
435 std::string
processQuery(std::string_view query,
bool force_ordering =
false)
const;
453 std::string_view key,
454 std::string_view type,
455 std::string_view units,
463 std::pair<std::string, std::string>
getCommand();
constexpr Time timeZero
Definition: helicsTime.hpp:31
@ destination_target
indicator that the target is a destination target
Definition: flagOperations.hpp:43
@ HELICS_LOG_LEVEL_PROFILING
Definition: helics_enums.h:190
std::unique_ptr< Message > receive(InterfaceHandle id)
Definition: FederateState.cpp:230
const std::vector< InterfaceHandle > & getEvents() const
Definition: FederateState.cpp:906
const std::vector< std::shared_ptr< const SmallBuffer > > & getAllValues(InterfaceHandle handle)
Definition: FederateState.cpp:273
constexpr Time initializationTime
Definition: helicsTime.hpp:40
@ indicator_flag
flag used for setting values
Definition: flagOperations.hpp:18
FederateStates getState() const
Definition: FederateState.cpp:174
Time nextAllowedSendTime() const
Definition: FederateState.hpp:339
std::atomic< GlobalFederateId > global_id
global id code, default to invalid
Definition: FederateState.hpp:66
bool returnableResult(MessageProcessingResult result)
Definition: CoreTypes.hpp:78
std::vector< std::pair< GlobalHandle, std::string_view > > getMessageDestinations(InterfaceHandle handle)
Definition: FederateState.cpp:597
InterfaceInfo & interfaces()
Definition: FederateState.hpp:170
@ optional_flag
flag indicating that a connection is optional and may not be matched
Definition: flagOperations.hpp:53
const std::string & lastErrorString() const
Definition: FederateState.hpp:350
Definition: InterfaceInfo.hpp:26
Definition: SmallBuffer.hpp:24
@ HELICS_LOG_LEVEL_NO_PRINT
Definition: helics_enums.h:186
std::unique_ptr< Message > receiveAny(InterfaceHandle &id)
Definition: FederateState.cpp:239
int publicationCount() const
Definition: FederateState.cpp:1914
IterationResult enterExecutingMode(IterationRequest iterate, bool sendRequest=false)
Definition: FederateState.cpp:493
Definition: EndpointInfo.hpp:32
InterfaceType
Definition: CoreTypes.hpp:99
void createInterface(InterfaceType htype, InterfaceHandle handle, std::string_view key, std::string_view type, std::string_view units, uint16_t flags)
Definition: FederateState.cpp:331
int32_t getCurrentIteration() const
Definition: FederateState.cpp:179
@ TERMINATING
the federate is in the process of shutting down
const GlobalHandle id
identifier for the handle
Definition: EndpointInfo.hpp:40
base helics enumerations for C++ API's, a namespace wrapper for the definitions defined in helics_enu...
Time getTimeProperty(int timeProperty) const
Definition: FederateState.cpp:1832
const std::pair< std::string, std::string > & getTagByIndex(size_t index) const
Definition: FederateState.hpp:273
Definition: CommonCore.hpp:74
X getValue(ValueFederate &fed, std::string_view key)
Definition: Subscriptions.hpp:31
bool getOptionFlag(int optionFlag) const
Definition: FederateState.cpp:1847
Definition: LocalFederateId.hpp:65
@ async_timing_flag
flag indicating use of asynchronous timing on a global level
Definition: flagOperations.hpp:81
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27
void reset()
Definition: FederateState.cpp:156
constexpr auto FORCE_ITERATION
simplified alias to force an iteration
Definition: CoreTypes.hpp:114
void lock()
Definition: FederateState.hpp:259
std::string processQuery(std::string_view query, bool force_ordering=false) const
Definition: FederateState.cpp:2328
void sendCommand(ActionMessage &command)
Definition: FederateState.cpp:2064
Definition: GlobalFederateId.hpp:72
Definition: ActionMessage.hpp:30
std::atomic< bool > init_transmitted
the initialization request has been transmitted
Definition: FederateState.hpp:88
IterationResult waitSetup()
Definition: FederateState.cpp:432
constexpr GlobalBrokerId parent_broker_id
Definition: GlobalFederateId.hpp:64
LocalFederateId local_id
id code for the local federate descriptor
Definition: FederateState.hpp:65
void reInit()
Definition: FederateState.cpp:167
int getIntegerProperty(int intProperty) const
Definition: FederateState.cpp:1900
int lastErrorCode() const noexcept
Definition: FederateState.hpp:352
bool try_lock() const
Definition: FederateState.hpp:262
uint16_t counter
26 counter for filter tracking or message counter
Definition: ActionMessage.hpp:41
int inputCount() const
Definition: FederateState.cpp:1924
void sleeplock() const
Definition: FederateState.hpp:243
InterfaceHandle handle
the interface handle component
Definition: GlobalFederateId.hpp:147
void setOptionFlag(int optionFlag, bool value)
Definition: FederateState.cpp:1735
constexpr auto ITERATE_IF_NEEDED
simplified alias to indicate that helics should iterate if warranted
Definition: CoreTypes.hpp:116
const std::string & getIdentifier() const
Definition: FederateState.hpp:166
void setLogger(std::function< void(int, std::string_view, std::string_view)> logFunction)
Definition: FederateState.cpp:224
void setTag(std::string_view tag, std::string_view value)
Definition: FederateState.cpp:2356
Time grantedTime() const
Definition: FederateState.hpp:337
const char * commandErrorString(int errorCode)
Definition: ActionMessage.cpp:828
std::optional< ActionMessage > processPostTerminationAction(const ActionMessage &action)
Definition: FederateState.cpp:409
std::unique_ptr< Message > getMessage(Time maxTime)
Definition: EndpointInfo.cpp:85
void setProperty(int timeProperty, Time propertyVal)
Definition: FederateState.cpp:1657
std::pair< std::string, std::string > waitCommand()
Definition: FederateState.cpp:2166
Time grantedTime
the time of the granted step
Definition: helicsTime.hpp:50
IterationRequest
Definition: CoreTypes.hpp:92
int32_t messageID
8 – message ID for a variety of purposes
Definition: ActionMessage.hpp:36
MessageProcessingResult genericUnspecifiedQueueProcess(bool busyReturn)
Definition: FederateState.cpp:805
void setExtraData(int32_t data)
Definition: ActionMessage.hpp:157
void setActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:130
uint64_t getQueueSize() const
Definition: FederateState.cpp:215
void setQueryCallback(std::function< std::string(std::string_view)> queryCallbackFunction)
Definition: FederateState.hpp:426
TimeSynchronizationMethod
enumeration of possible time coordination methods
Definition: FederateState.hpp:44
std::vector< GlobalFederateId > getDependencies() const
Definition: FederateState.cpp:1929
void unlock() const
Definition: FederateState.hpp:264
void setProperties(const ActionMessage &cmd)
Definition: FederateState.cpp:1550
IterationResult
Definition: CoreTypes.hpp:83
uint16_t getInterfaceFlags() const
Definition: FederateState.hpp:226
void spinlock() const
Definition: FederateState.hpp:236
SmallBuffer payload
buffer to contain the data payload
Definition: ActionMessage.hpp:48
GlobalFederateId dest_id
20 fed_id for a targeted message
Definition: ActionMessage.hpp:39
int endpointCount() const
Definition: FederateState.cpp:1919
void processCommunications(std::chrono::milliseconds period)
Definition: FederateState.cpp:880
std::string prettyPrintString(const ActionMessage &command)
Definition: ActionMessage.cpp:846
Definition: TimeCoordinator.hpp:55
auto tagCount() const
Definition: FederateState.hpp:278
void setGlobalId(GlobalFederateId newglobalId)
Definition: InterfaceInfo.hpp:67
FederateState(const std::string &fedName, const CoreFederateInfo &fedInfo)
Definition: FederateState.cpp:106
std::pair< std::string, std::string > getCommand()
Definition: FederateState.cpp:2151
void finalize()
Definition: FederateState.cpp:844
const std::string & getTag(std::string_view tag) const
Definition: FederateState.cpp:2370
constexpr uint16_t make_flags(unsigned int flag)
Definition: flagOperations.hpp:170
MessageProcessingResult
Definition: CoreTypes.hpp:64
Definition: FederateState.hpp:47
Time actionTime
40 the time an action took place or will take place //32
Definition: ActionMessage.hpp:44
std::atomic< bool > init_requested
Definition: FederateState.hpp:109
void forceProcessMessage(ActionMessage &action)
Definition: FederateState.cpp:422
int loggingLevel() const
Definition: FederateState.cpp:2351
void setDestination(GlobalHandle hand)
Definition: ActionMessage.hpp:99
IterationResult enterInitializingMode()
Definition: FederateState.cpp:461
void routeMessage(const ActionMessage &msg)
Definition: FederateState.cpp:287
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
Definition: CoreFederateInfo.hpp:16
Definition: helicsTime.hpp:49
@ HELICS_LOG_LEVEL_SUMMARY
Definition: helics_enums.h:194
@ HELICS_SEQUENCING_MODE_FAST
Definition: helics_enums.h:397
const InterfaceInfo & interfaces() const
Definition: FederateState.hpp:172
void logMessage(int level, std::string_view logMessageSource, std::string_view message, bool fromRemote=false) const
Definition: FederateState.cpp:2006
@ iteration_requested_flag
Definition: flagOperations.hpp:23
@ global_timing_flag
flag indicating to use global timing (overload of indicator flag)
Definition: flagOperations.hpp:76
bool checkActionFlag(uint16_t flags, FlagIndex flag)
Definition: flagOperations.hpp:138
@ EXECUTING
the federation has entered execution state and it now advancing in time
std::unique_ptr< Message > createMessageFromCommand(const ActionMessage &cmd)
Definition: ActionMessage.cpp:633
bool CheckSetValue(const char *dataToCheck, uint64_t len, Time currentTime, bool forceChangeCheck)
Definition: PublicationInfo.cpp:16
Definition: LocalFederateId.hpp:22
@ FINISHED
the federation has finished its execution
void addAction(const ActionMessage &action)
Definition: FederateState.cpp:317
void setParent(CommonCore *coreObject)
Definition: FederateState.hpp:205
@ PROFILING
profiling log level
Definition: logging.hpp:24
iteration_time requestTime(Time nextTime, IterationRequest iterate, bool sendRequest=false)
Definition: FederateState.cpp:606
@ required_flag
flag indicating that an action or match is required
Definition: flagOperations.hpp:45
action_message_def::action_t action() const noexcept
Definition: ActionMessage.hpp:88
std::pair< SmallBuffer, Time > getPublishedValue(InterfaceHandle handle)
Definition: FederateState.cpp:278
const std::shared_ptr< const SmallBuffer > & getValue(InterfaceHandle handle, uint32_t *inputIndex)
Definition: FederateState.cpp:266
@ error_flag
flag indicating an error condition associated with the command
Definition: flagOperations.hpp:17
void closeInterface(InterfaceHandle handle, InterfaceType type)
Definition: FederateState.cpp:367
std::vector< GlobalHandle > getSubscribers(InterfaceHandle handle)
Definition: FederateState.cpp:586
void setInterfaceProperty(const ActionMessage &cmd)
Definition: FederateState.cpp:1591
std::vector< GlobalFederateId > getDependents() const
Definition: FederateState.cpp:1934
int32_t availableMessages() const
Definition: EndpointInfo.cpp:130
@ ERRORED
the federation has encountered an error
void setSource(GlobalHandle hand)
Definition: ActionMessage.hpp:93
FederateStates
Definition: CoreTypes.hpp:21
bool checkAndSetValue(InterfaceHandle pub_id, const char *data, uint64_t len)
Definition: FederateState.cpp:184
const std::string & fedStateString(FederateStates state)
Definition: FederateState.cpp:2035
int32_t getHandleOption(InterfaceHandle handle, char iType, int32_t option) const
Definition: FederateState.cpp:1884
GlobalFederateId source_id
12 – for federate_id or route_id
Definition: ActionMessage.hpp:37
void bufferToJson(const LogBuffer &buffer, Json::Value &base)
Definition: LogBuffer.cpp:60
void setCoreObject(CommonCore *parent)
Definition: FederateState.cpp:1999
void setIterationFlags(ActionMessage &command, IterationRequest iterate)
Definition: ActionMessage.cpp:936
std::string generateJsonErrorResponse(JsonErrorCodes code, const std::string &message)
Definition: JsonGeneration.hpp:36