summaryrefslogtreecommitdiffstats
path: root/src/uscxml/plugins
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2013-02-08 12:26:42 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2013-02-08 12:26:42 (GMT)
commit71a3ca4fd78d7a9cca844e81f29f48b9c36bd4c7 (patch)
tree57a294052ce41ed131f458d4fb083fce3b743ef4 /src/uscxml/plugins
parent275bf3fd017ca27c021d4c10cc9d3d82fff13922 (diff)
downloaduscxml-71a3ca4fd78d7a9cca844e81f29f48b9c36bd4c7.zip
uscxml-71a3ca4fd78d7a9cca844e81f29f48b9c36bd4c7.tar.gz
uscxml-71a3ca4fd78d7a9cca844e81f29f48b9c36bd4c7.tar.bz2
Fixed history
Diffstat (limited to 'src/uscxml/plugins')
-rw-r--r--src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp8
-rw-r--r--src/uscxml/plugins/invoker/graphics/openscenegraph/OSGConverter.cpp48
-rw-r--r--src/uscxml/plugins/invoker/graphics/openscenegraph/OSGConverter.h42
-rw-r--r--src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp1
-rw-r--r--src/uscxml/plugins/invoker/sqlite3/Sqlite3Invoker.cpp44
-rw-r--r--src/uscxml/plugins/invoker/sqlite3/Sqlite3Invoker.h40
-rw-r--r--src/uscxml/plugins/ioprocessor/basichttp/libevent/EventIOProcessor.cpp34
-rw-r--r--src/uscxml/plugins/ioprocessor/basichttp/libevent/EventIOProcessor.h12
8 files changed, 209 insertions, 20 deletions
diff --git a/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp b/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp
index 9f04670..d8a3c8d 100644
--- a/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp
+++ b/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp
@@ -63,6 +63,8 @@ boost::shared_ptr<DataModelImpl> V8DataModel::create(Interpreter* interpreter) {
dm->setName(interpreter->getName());
dm->setSessionId(interpreter->getSessionId());
dm->eval("_ioprocessors = {};");
+ dm->eval("_invokers = {};");
+ dm->eval("_x = {};");
return dm;
}
@@ -183,7 +185,7 @@ Data V8DataModel::getValueAsData(const v8::Handle<v8::Value>& value) {
} else if(value->IsUint32()) {
LOG(ERROR) << "IsUint32 is unimplemented" << std::endl;
} else if(value->IsUndefined()) {
- LOG(ERROR) << "IsUndefined is unimplemented" << std::endl;
+ data.atom = "undefined";
}
return data;
}
@@ -269,6 +271,10 @@ std::string V8DataModel::evalAsString(const std::string& expr) {
v8::HandleScope handleScope;
v8::Context::Scope contextScope(_contexts.back());
v8::Handle<v8::Value> result = evalAsValue(expr);
+ if (result->IsObject()) {
+ Data data = getValueAsData(result);
+ return toStr(data);
+ }
v8::String::AsciiValue data(result->ToString());
return std::string(*data);
}
diff --git a/src/uscxml/plugins/invoker/graphics/openscenegraph/OSGConverter.cpp b/src/uscxml/plugins/invoker/graphics/openscenegraph/OSGConverter.cpp
new file mode 100644
index 0000000..eb3d810
--- /dev/null
+++ b/src/uscxml/plugins/invoker/graphics/openscenegraph/OSGConverter.cpp
@@ -0,0 +1,48 @@
+#include "OSGConverter.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 OSGConverterProvider() );
+ return true;
+}
+#endif
+
+OSGConverter::OSGConverter() {
+}
+
+OSGConverter::~OSGConverter() {
+};
+
+boost::shared_ptr<IOProcessorImpl> OSGConverter::create(Interpreter* interpreter) {
+ boost::shared_ptr<OSGConverter> invoker = boost::shared_ptr<OSGConverter>(new OSGConverter());
+ invoker->_interpreter = interpreter;
+ return invoker;
+}
+
+Data OSGConverter::getDataModelVariables() {
+ Data data;
+ return data;
+}
+
+void OSGConverter::send(const SendRequest& req) {
+ std::cout << req << std::endl;
+ Event event;
+ event.name = "error";
+ returnEvent(event);
+}
+
+void OSGConverter::cancel(const std::string sendId) {
+}
+
+void OSGConverter::invoke(const InvokeRequest& req) {
+}
+
+} \ No newline at end of file
diff --git a/src/uscxml/plugins/invoker/graphics/openscenegraph/OSGConverter.h b/src/uscxml/plugins/invoker/graphics/openscenegraph/OSGConverter.h
new file mode 100644
index 0000000..c52b1ee
--- /dev/null
+++ b/src/uscxml/plugins/invoker/graphics/openscenegraph/OSGConverter.h
@@ -0,0 +1,42 @@
+#ifndef OSGCONVERTER_H_W09J90F0
+#define OSGCONVERTER_H_W09J90F0
+
+#include <uscxml/Interpreter.h>
+
+#ifdef BUILD_AS_PLUGINS
+#include "uscxml/plugins/Plugins.h"
+#endif
+
+namespace uscxml {
+
+class OSGConverter : public InvokerImpl {
+public:
+ OSGConverter();
+ virtual ~OSGConverter();
+ virtual boost::shared_ptr<IOProcessorImpl> create(Interpreter* interpreter);
+
+ virtual std::set<std::string> getNames() {
+ std::set<std::string> names;
+ names.insert("osgconverter");
+ names.insert("osgconvert");
+ names.insert("http://uscxml.tk.informatik.tu-darmstadt.de/#osgconverter");
+ names.insert("http://uscxml.tk.informatik.tu-darmstadt.de/#osgconvert");
+ return names;
+ }
+
+ virtual Data getDataModelVariables();
+ virtual void send(const SendRequest& req);
+ virtual void cancel(const std::string sendId);
+ virtual void invoke(const InvokeRequest& req);
+
+protected:
+};
+
+#ifdef BUILD_AS_PLUGINS
+PLUMA_INHERIT_PROVIDER(OSGConverter, Invoker);
+#endif
+
+}
+
+
+#endif /* end of include guard: OSGCONVERTER_H_W09J90F0 */
diff --git a/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp b/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp
index 1f08378..0272ca8 100644
--- a/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp
+++ b/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp
@@ -19,6 +19,7 @@ HeartbeatInvoker::HeartbeatInvoker() {
}
HeartbeatInvoker::~HeartbeatInvoker() {
+ cancel("");
};
boost::shared_ptr<IOProcessorImpl> HeartbeatInvoker::create(Interpreter* interpreter) {
diff --git a/src/uscxml/plugins/invoker/sqlite3/Sqlite3Invoker.cpp b/src/uscxml/plugins/invoker/sqlite3/Sqlite3Invoker.cpp
new file mode 100644
index 0000000..e217eaa
--- /dev/null
+++ b/src/uscxml/plugins/invoker/sqlite3/Sqlite3Invoker.cpp
@@ -0,0 +1,44 @@
+#include "Sqlite3Invoker.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 Sqlite3InvokerProvider() );
+ return true;
+}
+#endif
+
+Sqlite3Invoker::Sqlite3Invoker() {
+}
+
+Sqlite3Invoker::~Sqlite3Invoker() {
+};
+
+boost::shared_ptr<IOProcessorImpl> Sqlite3Invoker::create(Interpreter* interpreter) {
+ boost::shared_ptr<Sqlite3Invoker> invoker = boost::shared_ptr<Sqlite3Invoker>(new Sqlite3Invoker());
+ invoker->_interpreter = interpreter;
+ return invoker;
+}
+
+Data Sqlite3Invoker::getDataModelVariables() {
+ Data data;
+ return data;
+}
+
+void Sqlite3Invoker::send(const SendRequest& req) {
+}
+
+void Sqlite3Invoker::cancel(const std::string sendId) {
+}
+
+void Sqlite3Invoker::invoke(const InvokeRequest& req) {
+}
+
+} \ No newline at end of file
diff --git a/src/uscxml/plugins/invoker/sqlite3/Sqlite3Invoker.h b/src/uscxml/plugins/invoker/sqlite3/Sqlite3Invoker.h
new file mode 100644
index 0000000..f2ae915
--- /dev/null
+++ b/src/uscxml/plugins/invoker/sqlite3/Sqlite3Invoker.h
@@ -0,0 +1,40 @@
+#ifndef SQLITE3INVOKER_H_W09J90F0
+#define SQLITE3INVOKER_H_W09J90F0
+
+#include <uscxml/Interpreter.h>
+
+#ifdef BUILD_AS_PLUGINS
+#include "uscxml/plugins/Plugins.h"
+#endif
+
+namespace uscxml {
+
+class Sqlite3Invoker : public InvokerImpl {
+public:
+ Sqlite3Invoker();
+ virtual ~Sqlite3Invoker();
+ virtual boost::shared_ptr<IOProcessorImpl> create(Interpreter* interpreter);
+
+ virtual std::set<std::string> getNames() {
+ std::set<std::string> names;
+ names.insert("sqlite3");
+ names.insert("http://uscxml.tk.informatik.tu-darmstadt.de/#sqlite3");
+ return names;
+ }
+
+ virtual Data getDataModelVariables();
+ virtual void send(const SendRequest& req);
+ virtual void cancel(const std::string sendId);
+ virtual void invoke(const InvokeRequest& req);
+
+protected:
+};
+
+#ifdef BUILD_AS_PLUGINS
+PLUMA_INHERIT_PROVIDER(Sqlite3Invoker, Invoker);
+#endif
+
+}
+
+
+#endif /* end of include guard: SQLITE3INVOKER_H_W09J90F0 */
diff --git a/src/uscxml/plugins/ioprocessor/basichttp/libevent/EventIOProcessor.cpp b/src/uscxml/plugins/ioprocessor/basichttp/libevent/EventIOProcessor.cpp
index 3ed39d6..98d08b3 100644
--- a/src/uscxml/plugins/ioprocessor/basichttp/libevent/EventIOProcessor.cpp
+++ b/src/uscxml/plugins/ioprocessor/basichttp/libevent/EventIOProcessor.cpp
@@ -75,14 +75,15 @@ Data EventIOProcessor::getDataModelVariables() {
void EventIOProcessor::send(const SendRequest& req) {
- // I cant figure out how to copy the reference into the struct :(
- _sendData[req.sendid].req = req;
- _sendData[req.sendid].ioProcessor = this;
+
+ _sendData[req.sendid] = new SendData();
+ _sendData[req.sendid]->scxmlReq = req;
+ _sendData[req.sendid]->ioProcessor = this;
int err = 0;
char uriBuf[1024];
- struct evhttp_uri* targetURI = evhttp_uri_parse(_sendData[req.sendid].req.target.c_str());
+ struct evhttp_uri* targetURI = evhttp_uri_parse(_sendData[req.sendid]->scxmlReq.target.c_str());
if (evhttp_uri_get_port(targetURI) < 0)
evhttp_uri_set_port(targetURI, 80);
const char* hostName = evhttp_uri_get_host(targetURI);
@@ -108,11 +109,14 @@ void EventIOProcessor::send(const SendRequest& req) {
ssLocalURI << evhttp_uri_get_path(targetURI) << evhttp_uri_get_fragment(targetURI);
std::string localURI = ssLocalURI.str();
- if (_httpConnections.find(endPoint) == _httpConnections.end())
- _httpConnections[endPoint] = evhttp_connection_base_new(_asyncQueue._eventLoop, _dns, evhttp_uri_get_host(targetURI), evhttp_uri_get_port(targetURI));
+ if (_httpConnections.find(endPoint) == _httpConnections.end()) {
+ struct evhttp_connection* conn = evhttp_connection_base_new(_asyncQueue._eventLoop, _dns, evhttp_uri_get_host(targetURI), evhttp_uri_get_port(targetURI));
+ evhttp_connection_set_retries(conn, 3);
+ _httpConnections[endPoint] = conn;
+ }
struct evhttp_connection* httpConn = _httpConnections[endPoint];
- struct evhttp_request* httpReq = evhttp_request_new(EventIOServer::httpSendReqDoneCallback, this);
+ struct evhttp_request* httpReq = evhttp_request_new(EventIOServer::httpSendReqDoneCallback, _sendData[req.sendid]);
// event name
if (req.name.size() > 0) {
@@ -163,6 +167,15 @@ void EventIOProcessor::send(const SendRequest& req) {
}
}
+void EventIOProcessor::httpSendReqDone(struct SendData* sendData) {
+ if (sendData->httpReq == NULL || evhttp_request_get_response_code(sendData->httpReq) != 200) {
+ Event failureEvent;
+ failureEvent.name = "error.communication";
+ sendData->ioProcessor->returnEvent(failureEvent);
+ }
+ delete _sendData[sendData->scxmlReq.sendid];
+}
+
void EventIOProcessor::httpRecvReq(struct evhttp_request *req) {
const char *cmdtype;
@@ -246,12 +259,6 @@ void EventIOProcessor::httpRecvReq(struct evhttp_request *req) {
evhttp_send_reply(req, 200, "OK", NULL);
}
-void EventIOProcessor::httpSendReqDone(struct evhttp_request *req) {
- if (req) {
- LOG(INFO) << "got return code " << evhttp_request_get_response_code(req) << std::endl;
- }
-}
-
EventIOServer::EventIOServer(unsigned short port) {
_port = port;
_base = event_base_new();
@@ -333,7 +340,6 @@ void EventIOServer::start() {
void EventIOServer::run(void* instance) {
EventIOServer* INSTANCE = (EventIOServer*)instance;
- LOG(INFO) << "HTTP Server started" << std::endl;
while(INSTANCE->_isRunning) {
event_base_dispatch(INSTANCE->_base);
}
diff --git a/src/uscxml/plugins/ioprocessor/basichttp/libevent/EventIOProcessor.h b/src/uscxml/plugins/ioprocessor/basichttp/libevent/EventIOProcessor.h
index 783332e..7dd1c41 100644
--- a/src/uscxml/plugins/ioprocessor/basichttp/libevent/EventIOProcessor.h
+++ b/src/uscxml/plugins/ioprocessor/basichttp/libevent/EventIOProcessor.h
@@ -23,7 +23,8 @@ class EventIOProcessor : public IOProcessorImpl {
public:
struct SendData {
EventIOProcessor* ioProcessor;
- uscxml::SendRequest req;
+ uscxml::SendRequest scxmlReq;
+ evhttp_request* httpReq;
};
EventIOProcessor();
@@ -48,11 +49,11 @@ public:
static void run(void* instance);
virtual std::string getPath() { return _interpreter->getName(); }
- virtual void httpSendReqDone(struct evhttp_request *req);
+ virtual void httpSendReqDone(struct SendData* sendData);
virtual void httpRecvReq(struct evhttp_request *req);
protected:
- std::map<std::string, SendData> _sendData;
+ std::map<std::string, SendData*> _sendData;
std::string _url;
@@ -82,9 +83,10 @@ private:
void determineAddress();
static std::string syncResolve(const std::string& hostname);
-
static void httpSendReqDoneCallback(struct evhttp_request *req, void *cb_arg) {
- ((EventIOProcessor*)cb_arg)->httpSendReqDone(req);
+ EventIOProcessor::SendData* sendData = (EventIOProcessor::SendData*)cb_arg;
+ sendData->httpReq = req;
+ sendData->ioProcessor->httpSendReqDone(sendData);
}
static void httpRecvReqCallback(struct evhttp_request *req, void *cb_arg) {
((EventIOProcessor*)cb_arg)->httpRecvReq(req);