diff options
author | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2014-08-13 15:02:25 (GMT) |
---|---|---|
committer | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2014-08-13 15:02:25 (GMT) |
commit | 66b0852b0618cc4bfff08d47aa0af56353226190 (patch) | |
tree | f1194ccb83779aef83e6d4afbfe8aee0aaedd224 /src/uscxml/plugins/invoker/vxml | |
parent | fe941ab36b44f083886c07a72d371b2cfba55fe3 (diff) | |
download | uscxml-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.cpp | 87 | ||||
-rw-r--r-- | src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.h | 25 |
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 |