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/scxml/USCXMLInvoker.cpp | |
parent | ef66cbbaf07bd1ac661f9a9622dcdaf6851ca6ba (diff) | |
download | uscxml-69247ac083836cfae493e0d220c5faf3818c0bf9.zip uscxml-69247ac083836cfae493e0d220c5faf3818c0bf9.tar.gz uscxml-69247ac083836cfae493e0d220c5faf3818c0bf9.tar.bz2 |
Introduced InvokerCallbacks
Diffstat (limited to 'src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp')
-rw-r--r-- | src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp | 46 |
1 files changed, 22 insertions, 24 deletions
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! |