15#ifndef WSFSCRIPTOBSERVERCLASS_HPP
16#define WSFSCRIPTOBSERVERCLASS_HPP
18#include "wsf_export.h"
26#include "UtCallbackHolder.hpp"
27#include "UtCompilerAttributes.hpp"
30#include "UtScriptData.hpp"
31#include "UtScriptDataPack.hpp"
79 using EventMap = std::map<std::string, std::set<std::string>>;
96 void Start()
override;
112 WSF_DEPRECATED
int AddEvent(
const std::string& aEventName,
113 std::unique_ptr<UtCallback> aCallbackPtr,
114 const std::string& aDefaultScriptName,
115 const std::string& aExpectedArgumentTypes)
117 return AddEventP(aEventName, std::move(aCallbackPtr), aDefaultScriptName, aExpectedArgumentTypes);
120 template<
typename... Args>
121 using Observer = UtCallbackListN<void(
double, Args...)>;
131 template<
bool EnableGuard =
false,
typename... Args,
typename ArgPacker>
132 void AddEvent(
const std::string& aEventName,
134 const std::string& aDefaultScriptName,
135 const std::string& aExpectedArgumentTypes,
136 const ArgPacker& aArgPacker);
143 template<
bool EnableGuard =
false,
typename... Args>
146 const std::string& aDefaultScriptName,
147 const std::string& aExpectedArgumentTypes)
152 aExpectedArgumentTypes,
153 UtStd::Bind(&UtScriptDataPack<Args...>));
156 int GetEventIndex(
const std::string& aEventName)
const;
174 : mScriptObserver(&aScriptObserver)
176 mScriptObserver->EventEntry();
189 mScriptObserver->EventExit();
197 bool EnableOrDisable(
bool aEnable,
const std::string& aCallbackName,
const std::string& aScriptName);
199 bool EnableOrDisable(
bool aEnable,
const std::string& aEventName,
const std::string& aScriptName, EventData& aEventData);
204 void ExecuteScriptList(
double aSimTime,
const std::vector<UtScript*>& aScriptList);
206 void ExecuteScriptList(
double aSimTime,
207 const std::vector<UtScript*>& aScriptList,
219 int AddEventP(
const std::string& aEventName,
220 std::unique_ptr<UtCallback> aCallbackPtr,
221 const std::string& aDefaultScriptName,
222 const std::string& aExpectedArgumentTypes);
224 bool mInitializeSuccess{
false};
226 EventToIndexMap mEventToIndex;
227 std::recursive_mutex mMutex;
248template<
bool EnableGuard,
typename... Args,
typename ArgPacker>
251 const std::string& aDefaultScriptName,
252 const std::string& aExpectedArgumentTypes,
253 const ArgPacker& aArgPacker)
255 auto callback = [=](
double aSimTime, Args&&... args)
260 aArgPacker(scriptArgs, std::forward<Args>(args)...);
261 if (!scriptArgs.mDataList.empty() || aExpectedArgumentTypes.empty())
266 AddEventP(aEventName, aObserver.Connect(callback), aDefaultScriptName, aExpectedArgumentTypes);
ut::script::Data UtScriptData
Definition WsfScriptContext.hpp:47
ut::script::DataList UtScriptDataList
Definition WsfScriptContext.hpp:48
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
UtScriptTypes * GetScriptTypes() const
Return a pointer to the script types/classes.
Definition WsfApplication.hpp:138
Definition WsfCallback.hpp:27
Definition WsfFuel.hpp:30
Definition WsfFuelingOperation.hpp:37
Definition WsfImage.hpp:36
Definition WsfLocalTrack.hpp:32
A base class for messages sent among simulation communication objects, processors and sensors.
Definition WsfMessage.hpp:33
Definition WsfMover.hpp:37
Definition WsfProcessor.hpp:39
WsfScenarioExtension()
Definition WsfScenarioExtension.cpp:21
virtual bool ProcessInput(UtInput &aInput)
Definition WsfScenarioExtension.cpp:62
virtual void SimulationCreated(WsfSimulation &aSimulation)
Definition WsfScenarioExtension.cpp:119
Definition WsfScriptContext.hpp:71
Definition WsfScriptObserver.hpp:73
std::map< std::string, std::set< std::string > > EventMap
Definition WsfScriptObserver.hpp:79
EventMap mEnabledEvents
Definition WsfScriptObserver.hpp:80
Definition WsfScriptObserver.hpp:170
EventGuard(WsfScriptObserver &aScriptObserver)
Definition WsfScriptObserver.hpp:173
EventGuard & operator=(const EventGuard &)=delete
EventGuard(EventGuard &&aOther)
Definition WsfScriptObserver.hpp:182
EventGuard & operator=(EventGuard &&)=delete
EventGuard(const EventGuard &)=delete
~EventGuard()
Definition WsfScriptObserver.hpp:185
Definition WsfScriptObserver.hpp:86
const EventToIndexMap & GetEventIndexes() const
Definition WsfScriptObserver.hpp:162
~WsfScriptObserver() override=default
UtCallbackHolder mCallbacks
Container to hold registered callbacks.
Definition WsfScriptObserver.hpp:216
const EventList & GetEvents() const
Definition WsfScriptObserver.hpp:160
int GetEventIndex(const std::string &aEventName) const
Definition WsfScriptObserver.cpp:150
UtCallbackListN< void(double, Args...)> Observer
Definition WsfScriptObserver.hpp:121
void ExecuteScriptList(double aSimTime, const std::vector< UtScript * > &aScriptList)
Definition WsfScriptObserver.cpp:727
static WsfScriptObserver * Find(const WsfSimulation &aSimulation)
Definition WsfScriptObserver.cpp:91
std::vector< UtScript * > ScriptList
Definition WsfScriptObserver.hpp:98
std::map< std::string, int > EventToIndexMap
Definition WsfScriptObserver.hpp:110
void Start() override
Definition WsfScriptObserver.cpp:120
const EventToIndexMap GetEventMap() const
Definition WsfScriptObserver.hpp:201
WSF_DEPRECATED int AddEvent(const std::string &aEventName, std::unique_ptr< UtCallback > aCallbackPtr, const std::string &aDefaultScriptName, const std::string &aExpectedArgumentTypes)
Definition WsfScriptObserver.hpp:112
ScriptList & GetScriptList(int aIndex)
Definition WsfScriptObserver.hpp:158
WsfScriptObserver(const WsfScriptObserver &aSrc)=delete
Copy constructor is declared but not defined to prevent use.
void AddEvent(const std::string &aEventName, Observer< Args... > &aObserver, const std::string &aDefaultScriptName, const std::string &aExpectedArgumentTypes)
Definition WsfScriptObserver.hpp:144
bool Initialize() override
Definition WsfScriptObserver.cpp:97
WsfScriptObserver(WsfSimulation &aSimulation, const WsfScriptObserverExtension &aScenario)
Definition WsfScriptObserver.cpp:341
void AddedToSimulation() override
Definition WsfScriptObserver.cpp:349
std::vector< EventData > EventList
Definition WsfScriptObserver.hpp:109
Definition WsfSensorMode.hpp:36
Definition WsfSensorResult.hpp:27
Definition WsfSensor.hpp:92
WsfSimulation & GetSimulation() const
Definition WsfSimulationExtension.hpp:50
WsfSimulationExtension()
Definition WsfSimulationExtension.cpp:23
friend class WsfSimulation
Definition WsfSimulationExtension.hpp:43
The main controller for a simulation.
Definition WsfSimulation.hpp:109
WsfApplication & GetApplication() const
Definition WsfSimulation.cpp:1536
A class that defines a task to be performed.
Definition WsfTask.hpp:28
Definition WsfTrackId.hpp:33
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
Definition WsfCommAddress.hpp:57
Definition WsfComm.hpp:43
Definition WsfCommNetwork.hpp:51
Definition WsfCommResult.hpp:34
Definition WsfCommRouterProtocolInterface.hpp:33
Definition WsfCommRouter.hpp:55
Definition WsfScriptObserver.hpp:233
CPP17_NODISCARD EventGuard make_event_guard(WsfScriptObserver &)
Definition WsfScriptObserver.hpp:237
CPP17_NODISCARD EventGuard make_event_guard< true >(WsfScriptObserver &aScriptObserver)
Definition WsfScriptObserver.hpp:242
WsfScriptObserver::EventGuard EventGuard
Definition WsfScriptObserver.hpp:234
void swap(WsfRoute &aLhs, WsfRoute &aRhs)
Definition WsfRoute.hpp:294
Definition WsfComm.hpp:36
Definition WsfComm.cpp:34
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Definition WsfScriptObserver.hpp:101
std::string mExpectedArgumentTypes
Definition WsfScriptObserver.hpp:105
std::string mDefaultScriptName
Definition WsfScriptObserver.hpp:104
bool mEnabled
Definition WsfScriptObserver.hpp:103
ScriptList mScriptList
Definition WsfScriptObserver.hpp:106
UtCallback * mCallbackPtr
Definition WsfScriptObserver.hpp:102