diff options
author | Stefan Radomski <github@mintwerk.de> | 2017-01-23 16:58:06 (GMT) |
---|---|---|
committer | Stefan Radomski <github@mintwerk.de> | 2017-01-23 16:58:06 (GMT) |
commit | 69247ac083836cfae493e0d220c5faf3818c0bf9 (patch) | |
tree | a63e584f7d3731ccaccb6ce02f844ea2b46f4cb9 /src/uscxml/plugins/invoker | |
parent | ef66cbbaf07bd1ac661f9a9622dcdaf6851ca6ba (diff) | |
download | uscxml-69247ac083836cfae493e0d220c5faf3818c0bf9.zip uscxml-69247ac083836cfae493e0d220c5faf3818c0bf9.tar.gz uscxml-69247ac083836cfae493e0d220c5faf3818c0bf9.tar.bz2 |
Introduced InvokerCallbacks
Diffstat (limited to 'src/uscxml/plugins/invoker')
4 files changed, 29 insertions, 28 deletions
diff --git a/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.cpp b/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.cpp index b5d7e8b..be13bf4 100644 --- a/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.cpp +++ b/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.cpp @@ -34,6 +34,7 @@ #include <boost/algorithm/string.hpp> #include "uscxml/interpreter/Logging.h" +#include "uscxml/util/URL.h" namespace uscxml { @@ -63,9 +64,9 @@ DirMonInvoker::~DirMonInvoker() { delete(_watcher); }; -std::shared_ptr<InvokerImpl> DirMonInvoker::create(InterpreterImpl* interpreter) { +std::shared_ptr<InvokerImpl> DirMonInvoker::create(InvokerCallbacks* callbacks) { std::shared_ptr<DirMonInvoker> invoker(new DirMonInvoker()); - invoker->_callbacks = interpreter; + invoker->_callbacks = callbacks; return invoker; } diff --git a/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.h b/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.h index e6bb9aa..31e535a 100644 --- a/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.h +++ b/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.h @@ -21,9 +21,11 @@ #define DIRMONINVOKER_H_W09J90F0 #include "uscxml/plugins/InvokerImpl.h" +#include "uscxml/interpreter/Logging.h" #include <map> #include <set> +#include <thread> #include <sys/stat.h> #ifdef BUILD_AS_PLUGINS @@ -101,7 +103,7 @@ class DirMonInvoker : public InvokerImpl, public DirectoryWatchMonitor { public: DirMonInvoker(); virtual ~DirMonInvoker(); - virtual std::shared_ptr<InvokerImpl> create(InterpreterImpl* interpreter); + virtual std::shared_ptr<InvokerImpl> create(InvokerCallbacks* callbacks); virtual std::list<std::string> getNames() { std::list<std::string> names; diff --git a/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp b/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp index 9ac8621..e776022 100644 --- a/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp +++ b/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp @@ -140,9 +140,9 @@ void USCXMLInvoker::run(void* instance) { INSTANCE->_isActive = false; } -std::shared_ptr<InvokerImpl> USCXMLInvoker::create(InterpreterImpl* interpreter) { +std::shared_ptr<InvokerImpl> USCXMLInvoker::create(InvokerCallbacks* callbacks) { std::shared_ptr<USCXMLInvoker> invoker(new USCXMLInvoker()); - invoker->_callbacks = interpreter; + invoker->_callbacks = callbacks; return invoker; } @@ -176,33 +176,31 @@ void USCXMLInvoker::invoke(const std::string& source, const Event& invokeEvent) if (_invokedInterpreter) { _invokedInterpreter.getImpl()->_parentQueue = _parentQueue; _invokedInterpreter.getImpl()->_invokeId = invokeEvent.invokeid; + + // test240 assumes that invoke request params will carry over to the datamodel _invokedInterpreter.getImpl()->_invokeReq = invokeEvent; // create new instances from the parent's ActionLanguage -#if 1 InterpreterImpl* invoked = _invokedInterpreter.getImpl().get(); - invoked->_execContent = _callbacks->_execContent.getImpl()->create(invoked); - invoked->_delayQueue = _callbacks->_delayQueue.getImplDelayed()->create(invoked); - invoked->_internalQueue = _callbacks->_internalQueue.getImplBase()->create(); - invoked->_externalQueue = _callbacks->_externalQueue.getImplBase()->create(); - invoked->_microStepper = _callbacks->_microStepper.getImpl()->create(invoked); + ActionLanguage al = _callbacks->getActionLanguage(); + + al.execContent = al.execContent.getImpl()->create(invoked); + al.delayQueue = al.delayQueue.getImplDelayed()->create(invoked); + al.internalQueue = al.internalQueue.getImplBase()->create(); + al.externalQueue = al.externalQueue.getImplBase()->create(); + al.microStepper = al.microStepper.getImpl()->create(invoked); + + _invokedInterpreter.setActionLanguage(al); + // TODO: setup invokers dom, check datamodel attribute and create new instance from parent if matching? + + // copy monitors + std::set<InterpreterMonitor*> monitors = _callbacks->getMonitors(); + for (auto monitor : monitors) { + if (monitor->copyToInvokers()) { + _invokedInterpreter.getImpl()->_monitors.insert(monitor); + } + } - // TODO: setup invokers dom, check datamodel attribute and create new instance from parent if matching? -#endif - // copy monitors - std::set<InterpreterMonitor*>::const_iterator monIter = _callbacks->_monitors.begin(); - while(monIter != _callbacks->_monitors.end()) { - if ((*monIter)->copyToInvokers()) { - _invokedInterpreter.getImpl()->_monitors.insert(*monIter); - } - monIter++; - } - - /** - * test240 assumes that invoke request params will carry over to the datamodel - * This is solved by passing the invoke request above - */ -// _invokedInterpreter.getImpl()->setInvokeRequest(req); _isActive = true; // we need to make sure it is at least setup to receive data! diff --git a/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.h b/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.h index 78e7057..d37d2af 100644 --- a/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.h +++ b/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.h @@ -50,7 +50,7 @@ public: USCXMLInvoker(); virtual ~USCXMLInvoker(); - virtual std::shared_ptr<InvokerImpl> create(InterpreterImpl* interpreter); + virtual std::shared_ptr<InvokerImpl> create(InvokerCallbacks* callbacks); virtual std::list<std::string> getNames() { std::list<std::string> names; |