summaryrefslogtreecommitdiffstats
path: root/src/uscxml/plugins/invoker/vxml
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-08-13 15:02:25 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-08-13 15:02:25 (GMT)
commit66b0852b0618cc4bfff08d47aa0af56353226190 (patch)
treef1194ccb83779aef83e6d4afbfe8aee0aaedd224 /src/uscxml/plugins/invoker/vxml
parentfe941ab36b44f083886c07a72d371b2cfba55fe3 (diff)
downloaduscxml-66b0852b0618cc4bfff08d47aa0af56353226190.zip
uscxml-66b0852b0618cc4bfff08d47aa0af56353226190.tar.gz
uscxml-66b0852b0618cc4bfff08d47aa0af56353226190.tar.bz2
Started renewed VoiceXMLInvoker
Diffstat (limited to 'src/uscxml/plugins/invoker/vxml')
-rw-r--r--src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.cpp87
-rw-r--r--src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.h25
2 files changed, 68 insertions, 44 deletions
diff --git a/src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.cpp b/src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.cpp
index 573920f..5a79094 100644
--- a/src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.cpp
+++ b/src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.cpp
@@ -19,11 +19,25 @@
#include "VoiceXMLInvoker.h"
#include <glog/logging.h>
+#include "uscxml/UUID.h"
+
+#include <DOM/io/Stream.hpp>
#ifdef BUILD_AS_PLUGINS
#include <Pluma/Connector.hpp>
#endif
+#define ISSUE_REQUEST(name) {\
+ Arabica::DOM::Document<std::string> name##XML = name.toXML(true);\
+ name##XML.getDocumentElement().setPrefix("mmi");\
+ std::stringstream name##XMLSS;\
+ name##XMLSS << name##XML;\
+ URL name##URL(target);\
+ name##URL.setOutContent(name##XMLSS.str());\
+ name##URL.addOutHeader("Content-type", "application/xml");\
+ name##URL.download(false);\
+}
+
namespace uscxml {
#ifdef BUILD_AS_PLUGINS
@@ -43,20 +57,15 @@ VoiceXMLInvoker::~VoiceXMLInvoker() {
boost::shared_ptr<InvokerImpl> VoiceXMLInvoker::create(InterpreterImpl* interpreter) {
boost::shared_ptr<VoiceXMLInvoker> invoker = boost::shared_ptr<VoiceXMLInvoker>(new VoiceXMLInvoker());
invoker->_interpreter = interpreter;
- invoker->_pub = umundo::TypedPublisher("mmi:jvoicexml");
- invoker->_sub = umundo::TypedSubscriber("mmi:jvoicexml");
-
- invoker->_pub.registerType("LifeCycleEvent", new ::LifeCycleEvent());
-
-
- invoker->_node.addPublisher(invoker->_pub);
- invoker->_node.addSubscriber(invoker->_sub);
-
return invoker;
}
-void VoiceXMLInvoker::receive(void* object, umundo::Message* msg) {
- std::cout << msg->getMeta("um.s11n.type") << std::endl;
+bool VoiceXMLInvoker::httpRecvRequest(const HTTPServer::Request& request) {
+ return true;
+}
+
+void VoiceXMLInvoker::setURL(const std::string& url) {
+ _url = url;
}
Data VoiceXMLInvoker::getDataModelVariables() {
@@ -65,33 +74,43 @@ Data VoiceXMLInvoker::getDataModelVariables() {
}
void VoiceXMLInvoker::send(const SendRequest& req) {
- StartRequest start;
- std::stringstream domSS;
-// if (req.dom) {
-// // hack until jVoiceXML supports XML
-// std::cout << req.dom;
-// Arabica::DOM::NodeList<std::string> prompts = req.dom.getElementsByTagName("vxml:prompt");
-// for (int i = 0; i < prompts.getLength(); i++) {
-// if (prompts.item(i).hasChildNodes()) {
-// domSS << prompts.item(i).getFirstChild().getNodeValue() << ".";
-// }
-// }
-// }
-// domSS << req.getFirstDOMElement();
- domSS << req.dom;
- start.content = domSS.str();
- _interpreter->getDataModel().replaceExpressions(start.content);
-
- start.requestId = "asdf";
- start.source = "asdf";
- start.target = "umundo://mmi/jvoicexml";
- ::LifeCycleEvent lce = MMIProtoBridge::toProto(start);
- _pub.sendObj("LifeCycleEvent", &lce);
}
void VoiceXMLInvoker::invoke(const InvokeRequest& req) {
- _pub.waitForSubscribers(1);
+ HTTPServer::getInstance()->registerServlet(req.invokeid, this);
+
+ std::string target;
+ Event::getParam(req.params, "target", target);
+
+ NewContextRequest newCtxReq;
+ newCtxReq.source = _url;
+ newCtxReq.target = target;
+ newCtxReq.requestId = uscxml::UUID::getUUID();
+ ISSUE_REQUEST(newCtxReq);
+
+ _isRunning = true;
+ _thread = new tthread::thread(VoiceXMLInvoker::run, this);
+
+}
+void VoiceXMLInvoker::run(void* instance) {
+ VoiceXMLInvoker* INSTANCE = (VoiceXMLInvoker*)instance;
+ while(true) {
+ SendRequest req = INSTANCE->_workQueue.pop();
+ if (INSTANCE->_isRunning) {
+ INSTANCE->process(req);
+ } else {
+ return;
+ }
+ }
+}
+
+void VoiceXMLInvoker::process(SendRequest& ctx) {
+
+}
+
+void VoiceXMLInvoker::uninvoke() {
+ HTTPServer::getInstance()->unregisterServlet(this);
}
} \ No newline at end of file
diff --git a/src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.h b/src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.h
index 88afc1b..b70a073 100644
--- a/src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.h
+++ b/src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.h
@@ -21,11 +21,10 @@
#define VOICEXMLINVOKER_H_W09J90F0
#include <uscxml/Interpreter.h>
-#include <uscxml/plugins/ioprocessor/modality/MMIMessages.h>
-#include <uscxml/plugins/ioprocessor/modality/MMIProtoBridge.h>
+#include <uscxml/messages/MMIMessages.h>
+#include "uscxml/server/HTTPServer.h"
-#include <umundo/core.h>
-#include <umundo/s11n.h>
+// #include <uscxml/plugins/ioprocessor/modality/MMIProtoBridge.h>
#ifdef BUILD_AS_PLUGINS
#include "uscxml/plugins/Plugins.h"
@@ -33,7 +32,7 @@
namespace uscxml {
-class VoiceXMLInvoker : public InvokerImpl, public umundo::TypedReceiver {
+class VoiceXMLInvoker : public InvokerImpl, public HTTPServlet {
public:
VoiceXMLInvoker();
virtual ~VoiceXMLInvoker();
@@ -47,17 +46,23 @@ public:
return names;
}
- virtual void receive(void* object, umundo::Message* msg);
-
+ bool httpRecvRequest(const HTTPServer::Request& request);
+ void setURL(const std::string& url);
+
virtual Data getDataModelVariables();
virtual void send(const SendRequest& req);
virtual void invoke(const InvokeRequest& req);
+ virtual void uninvoke();
+ static void run(void*);
+ void process(SendRequest& ctx);
protected:
- umundo::Node _node;
- umundo::TypedPublisher _pub;
- umundo::TypedSubscriber _sub;
+ std::string _url;
+
+ tthread::thread* _thread;
+ concurrency::BlockingQueue<SendRequest> _workQueue;
+ bool _isRunning;
};
#ifdef BUILD_AS_PLUGINS