diff options
author | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-01-10 22:42:42 (GMT) |
---|---|---|
committer | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-01-10 22:42:42 (GMT) |
commit | 7aa7095d17a180d663cd9647c31d99d97c1dca4f (patch) | |
tree | 460bc3a67f0adc3199bec9f22ee15a102263eb4c /src/uscxml/plugins/invoker/heartbeat | |
parent | da1032ffbff229ce2ca9a83d47522ff45c90ba23 (diff) | |
download | uscxml-7aa7095d17a180d663cd9647c31d99d97c1dca4f.zip uscxml-7aa7095d17a180d663cd9647c31d99d97c1dca4f.tar.gz uscxml-7aa7095d17a180d663cd9647c31d99d97c1dca4f.tar.bz2 |
Major changes - see details
- Dynamic SceneGraph ML
- V8 DOM for ecmascript datamodel
- New heartbeat invoker
- Fixed various bugs
Diffstat (limited to 'src/uscxml/plugins/invoker/heartbeat')
-rw-r--r-- | src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp | 95 | ||||
-rw-r--r-- | src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.h | 54 |
2 files changed, 149 insertions, 0 deletions
diff --git a/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp b/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp new file mode 100644 index 0000000..6bc06d9 --- /dev/null +++ b/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp @@ -0,0 +1,95 @@ +#include "HeartbeatInvoker.h" +#include <glog/logging.h> + +#ifdef BUILD_AS_PLUGINS +#include <Pluma/Connector.hpp> +#endif + +namespace uscxml { + +#ifdef BUILD_AS_PLUGINS +PLUMA_CONNECTOR +bool connect(pluma::Host& host) { + host.add( new HeartbeatInvokerProvider() ); + return true; +} +#endif + +HeartbeatInvoker::HeartbeatInvoker() { +} + +HeartbeatInvoker::~HeartbeatInvoker() { +}; + +Invoker* HeartbeatInvoker::create(Interpreter* interpreter) { + HeartbeatInvoker* invoker = new HeartbeatInvoker(); + invoker->_interpreter = interpreter; + return invoker; +} + +Data HeartbeatInvoker::getDataModelVariables() { + Data data; + return data; +} + +void HeartbeatInvoker::send(SendRequest& req) { +} + +void HeartbeatInvoker::cancel(const std::string sendId) { + HeartbeatDispatcher::getInstance()->cancelEvent(toStr(this)); +} + +void HeartbeatInvoker::sendToParent(SendRequest& req) { +} + +void HeartbeatInvoker::invoke(InvokeRequest& req) { + _invokeId = req.invokeid; + _event.invokeid = _invokeId; + std::string intervalStr; + double interval = 0; + unsigned long intervalMs = 0; + InvokeRequest::params_t::iterator paramIter = req.params.begin(); + while(paramIter != req.params.end()) { + if (boost::iequals(paramIter->first, "interval")) { + intervalStr = paramIter->second; + NumAttr intervalAttr(paramIter->second); + interval = strTo<double>(intervalAttr.value); + if (false) { + } else if (boost::iequals(intervalAttr.unit, "s")) { + intervalMs = interval * 1000; + } else if (boost::iequals(intervalAttr.unit, "ms")) { + intervalMs = interval; + } else { + intervalMs = interval; + } + } + if (boost::iequals(paramIter->first, "eventname")) { + _event.name = paramIter->second; + } + paramIter++; + } + if (_event.name.length() == 0) + _event.name = std::string("heartbeat." + intervalStr); + + if (intervalMs > 0) { + HeartbeatDispatcher::getInstance()->addEvent(toStr(this), HeartbeatInvoker::dispatch, intervalMs, this, true); + } +} + +void HeartbeatInvoker::dispatch(void* instance, std::string name) { + HeartbeatInvoker* invoker = (HeartbeatInvoker*)instance; + invoker->_interpreter->receive(invoker->_event); +} + +HeartbeatDispatcher* HeartbeatDispatcher::_instance = NULL; +HeartbeatDispatcher* HeartbeatDispatcher::getInstance() { + if (_instance == NULL) { + _instance = new HeartbeatDispatcher(); + _instance->start(); + } + return _instance; +} + +HeartbeatDispatcher::HeartbeatDispatcher() {} + +}
\ No newline at end of file diff --git a/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.h b/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.h new file mode 100644 index 0000000..9a6cb47 --- /dev/null +++ b/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.h @@ -0,0 +1,54 @@ +#ifndef HEARTBEATINVOKER_H_W09J90F0 +#define HEARTBEATINVOKER_H_W09J90F0 + +#include <uscxml/Interpreter.h> + +#ifdef BUILD_AS_PLUGINS +#include "uscxml/plugins/Plugins.h" +#endif + +namespace uscxml { + +class HeartbeatInvoker : public Invoker { +public: + HeartbeatInvoker(); + virtual ~HeartbeatInvoker(); + virtual Invoker* create(Interpreter* interpreter); + + virtual std::set<std::string> getNames() { + std::set<std::string> names; + names.insert("heartbeat"); + names.insert("http://uscxml.tk.informatik.tu-darmstadt.de/#heartbaet"); + return names; + } + + virtual Data getDataModelVariables(); + virtual void send(SendRequest& req); + virtual void cancel(const std::string sendId); + virtual void invoke(InvokeRequest& req); + virtual void sendToParent(SendRequest& req); + + static void dispatch(void* instance, std::string name); + +protected: + std::string _invokeId; + Event _event; + +}; + +class HeartbeatDispatcher : public DelayedEventQueue { +public: + static HeartbeatDispatcher* getInstance(); +protected: + static HeartbeatDispatcher* _instance; + HeartbeatDispatcher(); +}; + +#ifdef BUILD_AS_PLUGINS +PLUMA_INHERIT_PROVIDER(HeartbeatInvoker, Invoker); +#endif + +} + + +#endif /* end of include guard: HEARTBEATINVOKER_H_W09J90F0 */ |