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 | |
parent | fe941ab36b44f083886c07a72d371b2cfba55fe3 (diff) | |
download | uscxml-66b0852b0618cc4bfff08d47aa0af56353226190.zip uscxml-66b0852b0618cc4bfff08d47aa0af56353226190.tar.gz uscxml-66b0852b0618cc4bfff08d47aa0af56353226190.tar.bz2 |
Started renewed VoiceXMLInvoker
Diffstat (limited to 'src/uscxml/plugins')
-rw-r--r-- | src/uscxml/plugins/invoker/CMakeLists.txt | 38 | ||||
-rw-r--r-- | src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp | 2 | ||||
-rw-r--r-- | src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.cpp | 87 | ||||
-rw-r--r-- | src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.h | 25 | ||||
-rw-r--r-- | src/uscxml/plugins/ioprocessor/modality/MMIMessages.cpp | 436 | ||||
-rw-r--r-- | src/uscxml/plugins/ioprocessor/modality/MMIMessages.h | 499 |
6 files changed, 86 insertions, 1001 deletions
diff --git a/src/uscxml/plugins/invoker/CMakeLists.txt b/src/uscxml/plugins/invoker/CMakeLists.txt index 31ec444..2d55aa1 100644 --- a/src/uscxml/plugins/invoker/CMakeLists.txt +++ b/src/uscxml/plugins/invoker/CMakeLists.txt @@ -550,27 +550,23 @@ if (NOT BUILD_MINIMAL) endif() - # VoiceXML modality components - - if (UMUNDO_FOUND AND OFF) - set(USCXML_INVOKERS "vxml ${USCXML_INVOKERS}") - file(GLOB_RECURSE VXML_INVOKER - vxml/*.cpp - vxml/*.h - ) - if (BUILD_AS_PLUGINS) - source_group("" FILES ${VXML_INVOKER}) - add_library( - invoker_voicexml SHARED - ${VXML_INVOKER} - "../Plugins.cpp") - target_link_libraries(invoker_voicexml uscxml) - set_target_properties(invoker_voicexml PROPERTIES FOLDER "Plugin Invoker") - set_target_properties(invoker_voicexml PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS") - set_target_properties(invoker_voicexml PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${OUTPUT_DIR}/lib") - else() - list (APPEND USCXML_FILES ${VXML_INVOKER}) - endif() + set(USCXML_INVOKERS "vxml ${USCXML_INVOKERS}") + file(GLOB_RECURSE VXML_INVOKER + vxml/*.cpp + vxml/*.h + ) + if (BUILD_AS_PLUGINS) + source_group("" FILES ${VXML_INVOKER}) + add_library( + invoker_voicexml SHARED + ${VXML_INVOKER} + "../Plugins.cpp") + target_link_libraries(invoker_voicexml uscxml) + set_target_properties(invoker_voicexml PROPERTIES FOLDER "Plugin Invoker") + set_target_properties(invoker_voicexml PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS") + set_target_properties(invoker_voicexml PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${OUTPUT_DIR}/lib") + else() + list (APPEND USCXML_FILES ${VXML_INVOKER}) endif() endif() # BUILD_MINIMAL diff --git a/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp b/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp index f8b4904..cc06b52 100644 --- a/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp +++ b/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp @@ -98,7 +98,7 @@ void HeartbeatInvoker::invoke(const InvokeRequest& req) { void HeartbeatInvoker::dispatch(void* instance, std::string name) { HeartbeatInvoker* invoker = (HeartbeatInvoker*)instance; - invoker->returnEvent(invoker->_event); + invoker->returnEvent(invoker->_event, true); } HeartbeatDispatcher* HeartbeatDispatcher::_instance = NULL; 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 diff --git a/src/uscxml/plugins/ioprocessor/modality/MMIMessages.cpp b/src/uscxml/plugins/ioprocessor/modality/MMIMessages.cpp deleted file mode 100644 index 1c5b98a..0000000 --- a/src/uscxml/plugins/ioprocessor/modality/MMIMessages.cpp +++ /dev/null @@ -1,436 +0,0 @@ -/** - * @file - * @author 2012-2013 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de) - * @copyright Simplified BSD - * - * @cond - * This program is free software: you can redistribute it and/or modify - * it under the terms of the FreeBSD license as published by the FreeBSD - * project. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the FreeBSD license along with this - * program. If not, see <http://www.opensource.org/licenses/bsd-license>. - * @endcond - */ - -#include "MMIMessages.h" - -#include <DOM/Simple/DOMImplementation.hpp> -#include <DOM/io/Stream.hpp> -#include <DOM/SAX2DOM/SAX2DOM.hpp> -#include <SAX/helpers/InputSourceResolver.hpp> - -#include <uscxml/DOMUtils.h> - -#include <boost/algorithm/string.hpp> - -#define STRING_ATTR_OR_EXPR(element, name)\ -(element.hasAttributeNS(nameSpace, "name##Expr") && interpreter ? \ - interpreter->getDataModel().evalAsString(element.getAttributeNS(nameSpace, "name##Expr")) : \ - (element.hasAttributeNS(nameSpace, #name) ? element.getAttributeNS(nameSpace, #name) : "") \ -) - -#define FIND_EVENT_NODE(node)\ -while (node) {\ - if (node.getNodeType() == Node_base::ELEMENT_NODE) {\ - if (boost::iequals(node.getLocalName(), "MMI")) {\ - node = node.getFirstChild();\ - continue;\ - } else {\ - break;\ - }\ - }\ - node = node.getNextSibling();\ -}\ - - -namespace uscxml { - -using namespace Arabica::DOM; - -std::string MMIEvent::nameSpace = "http://www.w3.org/2008/04/mmi-arch"; - -MMIEvent::Type MMIEvent::getType(Arabica::DOM::Node<std::string> node) { - if (!node || node.getNodeType() != Arabica::DOM::Node_base::ELEMENT_NODE) - return INVALID; - - // MMI container? - if (boost::iequals(node.getLocalName(), "MMI")) { - node = node.getFirstChild(); - if (!node) - return INVALID; - while(node.getNodeType() != Arabica::DOM::Node_base::ELEMENT_NODE) { - node = node.getNextSibling(); - if (!node) - return INVALID; - } - } - - if (boost::iequals(node.getLocalName(), "NEWCONTEXTREQUEST")) - return NEWCONTEXTREQUEST; - if (boost::iequals(node.getLocalName(), "NEWCONTEXTRESPONSE")) - return NEWCONTEXTRESPONSE; - if (boost::iequals(node.getLocalName(), "PREPAREREQUEST")) - return PREPAREREQUEST; - if (boost::iequals(node.getLocalName(), "PREPARERESPONSE")) - return PREPARERESPONSE; - if (boost::iequals(node.getLocalName(), "STARTREQUEST")) - return STARTREQUEST; - if (boost::iequals(node.getLocalName(), "STARTRESPONSE")) - return STARTRESPONSE; - if (boost::iequals(node.getLocalName(), "DONENOTIFICATION")) - return DONENOTIFICATION; - if (boost::iequals(node.getLocalName(), "CANCELREQUEST")) - return CANCELREQUEST; - if (boost::iequals(node.getLocalName(), "CANCELRESPONSE")) - return CANCELRESPONSE; - if (boost::iequals(node.getLocalName(), "PAUSEREQUEST")) - return PAUSEREQUEST; - if (boost::iequals(node.getLocalName(), "PAUSERESPONSE")) - return PAUSERESPONSE; - if (boost::iequals(node.getLocalName(), "RESUMEREQUEST")) - return RESUMEREQUEST; - if (boost::iequals(node.getLocalName(), "RESUMERESPONSE")) - return RESUMERESPONSE; - if (boost::iequals(node.getLocalName(), "EXTENSIONNOTIFICATION")) - return EXTENSIONNOTIFICATION; - if (boost::iequals(node.getLocalName(), "CLEARCONTEXTREQUEST")) - return CLEARCONTEXTREQUEST; - if (boost::iequals(node.getLocalName(), "CLEARCONTEXTRESPONSE")) - return CLEARCONTEXTRESPONSE; - if (boost::iequals(node.getLocalName(), "STATUSREQUEST")) - return STATUSREQUEST; - if (boost::iequals(node.getLocalName(), "STATUSRESPONSE")) - return STATUSRESPONSE; - return INVALID; -} - -Arabica::DOM::Document<std::string> MMIEvent::toXML(bool encapsulateInMMI) const { - Arabica::DOM::DOMImplementation<std::string> domFactory = Arabica::SimpleDOM::DOMImplementation<std::string>::getDOMImplementation(); - Document<std::string> doc = domFactory.createDocument(nameSpace, "", 0); - Element<std::string> msgElem = doc.createElementNS(nameSpace, tagName); - msgElem.setAttributeNS(nameSpace, "Source", source); - msgElem.setAttributeNS(nameSpace, "Target", target); - msgElem.setAttributeNS(nameSpace, "RequestID", requestId); - - if (data.size() > 0) { - Element<std::string> dataElem = doc.createElementNS(nameSpace, "Data"); - - // try to parse content - std::stringstream* ss = new std::stringstream(); - (*ss) << data; - std::auto_ptr<std::istream> ssPtr(ss); - Arabica::SAX::InputSource<std::string> inputSource; - inputSource.setByteStream(ssPtr); - - NameSpacingParser parser; - if(parser.parse(inputSource)) { - Node<std::string> importedNode = doc.importNode(parser.getDocument().getDocumentElement(), true); - dataElem.appendChild(importedNode); - } else { - Text<std::string> textElem = doc.createTextNode(data); - dataElem.appendChild(textElem); - } - msgElem.appendChild(dataElem); - } - - if (encapsulateInMMI) { - Element<std::string> mmiElem = doc.createElementNS(nameSpace, "mmi"); - mmiElem.appendChild(msgElem); - doc.appendChild(mmiElem); - } else { - doc.appendChild(msgElem); - } - return doc; -} - -Arabica::DOM::Document<std::string> ContextualizedRequest::toXML(bool encapsulateInMMI) const { - Document<std::string> doc = MMIEvent::toXML(encapsulateInMMI); - Element<std::string> msgElem = Element<std::string>(doc.getDocumentElement().getFirstChild()); - msgElem.setAttributeNS(nameSpace, "Context", context); - return doc; -} - -Arabica::DOM::Document<std::string> ContentRequest::toXML(bool encapsulateInMMI) const { - Document<std::string> doc = ContextualizedRequest::toXML(encapsulateInMMI); - Element<std::string> msgElem = Element<std::string>(doc.getDocumentElement().getFirstChild()); - - if (contentURL.href.size() > 0) { - Element<std::string> contentURLElem = doc.createElementNS(nameSpace, "ContentURL"); - contentURLElem.setAttributeNS(nameSpace, "href", contentURL.href); - contentURLElem.setAttributeNS(nameSpace, "fetchtimeout", contentURL.fetchTimeout); - contentURLElem.setAttributeNS(nameSpace, "max-age", contentURL.maxAge); - msgElem.appendChild(contentURLElem); - } - - if (content.size() > 0) { - Element<std::string> contentElem = doc.createElementNS(nameSpace, "content"); - - // try to parse content - std::stringstream* ss = new std::stringstream(); - (*ss) << content; - std::auto_ptr<std::istream> ssPtr(ss); - Arabica::SAX::InputSource<std::string> inputSource; - inputSource.setByteStream(ssPtr); - - Arabica::SAX2DOM::Parser<std::string> parser; - if(parser.parse(inputSource)) { - Node<std::string> importedNode = doc.importNode(parser.getDocument().getDocumentElement(), true); - contentElem.appendChild(importedNode); - } else { - Text<std::string> textElem = doc.createTextNode(content); - contentElem.appendChild(textElem); - } - msgElem.appendChild(contentElem); - - } - return doc; -} - -Arabica::DOM::Document<std::string> ExtensionNotification::toXML(bool encapsulateInMMI) const { - Document<std::string> doc = ContextualizedRequest::toXML(encapsulateInMMI); - Element<std::string> msgElem = Element<std::string>(doc.getDocumentElement().getFirstChild()); - msgElem.setAttributeNS(nameSpace, "Name", name); - return doc; -} - -Arabica::DOM::Document<std::string> StatusResponse::toXML(bool encapsulateInMMI) const { - Document<std::string> doc = ContextualizedRequest::toXML(encapsulateInMMI); - Element<std::string> msgElem = Element<std::string>(doc.getDocumentElement().getFirstChild()); - if (status == ALIVE) { - msgElem.setAttributeNS(nameSpace, "Status", "alive"); - } else if(status == DEAD) { - msgElem.setAttributeNS(nameSpace, "Status", "dead"); - } else if(status == FAILURE) { - msgElem.setAttributeNS(nameSpace, "Status", "failure"); - } else if(status == SUCCESS) { - msgElem.setAttributeNS(nameSpace, "Status", "success"); - } - return doc; -} - -Arabica::DOM::Document<std::string> StatusInfoResponse::toXML(bool encapsulateInMMI) const { - Document<std::string> doc = StatusResponse::toXML(encapsulateInMMI); - Element<std::string> msgElem = Element<std::string>(doc.getDocumentElement().getFirstChild()); - - Element<std::string> statusInfoElem = doc.createElementNS(nameSpace, "StatusInfo"); - Text<std::string> statusInfoText = doc.createTextNode(statusInfo); - statusInfoElem.appendChild(statusInfoText); - msgElem.appendChild(statusInfoElem); - - return doc; -} - -Arabica::DOM::Document<std::string> StatusRequest::toXML(bool encapsulateInMMI) const { - Document<std::string> doc = ContextualizedRequest::toXML(encapsulateInMMI); - Element<std::string> msgElem = Element<std::string>(doc.getDocumentElement().getFirstChild()); - - if (automaticUpdate) { - msgElem.setAttributeNS(nameSpace, "RequestAutomaticUpdate", "true"); - } else { - msgElem.setAttributeNS(nameSpace, "RequestAutomaticUpdate", "false"); - } - - return doc; -} - -MMIEvent MMIEvent::fromXML(Arabica::DOM::Node<std::string> node, InterpreterImpl* interpreter) { - MMIEvent msg; - FIND_EVENT_NODE(node); - - Element<std::string> msgElem(node); - msg.source = STRING_ATTR_OR_EXPR(msgElem, Source); - msg.target = STRING_ATTR_OR_EXPR(msgElem, Target); -// msg.data = STRING_ATTR_OR_EXPR(msgElem, Data); - msg.requestId = STRING_ATTR_OR_EXPR(msgElem, RequestID); - msg.tagName = msgElem.getLocalName(); - - Element<std::string> dataElem; - node = msgElem.getFirstChild(); - while (node) { - if (node.getNodeType() == Node_base::ELEMENT_NODE) - dataElem = Element<std::string>(node); - if (dataElem && boost::iequals(dataElem.getLocalName(), "data")) - break; - node = node.getNextSibling(); - } - - if (dataElem && boost::iequals(dataElem.getLocalName(), "data")) { - std::stringstream ss; - node = dataElem.getFirstChild(); - if (node) - ss << node; - msg.data = ss.str(); - } - - return msg; -} - -MMIEvent::operator Event() const { - Event ev; - ev.setOriginType("mmi.event"); - ev.setOrigin(source); - ev.setRaw(data); - ev.setSendId(requestId); - if (data.length() > 0) { - ev.initContent(data); - } - return ev; -} - -ContextualizedRequest ContextualizedRequest::fromXML(Arabica::DOM::Node<std::string> node, InterpreterImpl* interpreter) { - ContextualizedRequest msg(MMIEvent::fromXML(node, interpreter)); - FIND_EVENT_NODE(node); - - Element<std::string> msgElem(node); - msg.context = STRING_ATTR_OR_EXPR(msgElem, Context); - return msg; -} - -ContextualizedRequest::operator Event() const { - Event ev = MMIEvent::operator Event(); - // do we want to represent the context? It's the interpreters name already - return ev; -} - - -ContentRequest ContentRequest::fromXML(Arabica::DOM::Node<std::string> node, InterpreterImpl* interpreter) { - ContentRequest msg(ContextualizedRequest::fromXML(node, interpreter)); - FIND_EVENT_NODE(node); - - Element<std::string> msgElem(node); - Element<std::string> contentElem; - - node = msgElem.getFirstChild(); - while (node) { - if (node.getNodeType() == Node_base::ELEMENT_NODE) { - contentElem = Element<std::string>(node); - if (boost::iequals(contentElem.getLocalName(), "content") || - boost::iequals(contentElem.getLocalName(), "contentURL")) - break; - } - node = node.getNextSibling(); - } - - if (contentElem) { - if(boost::iequals(contentElem.getLocalName(), "content")) { - std::stringstream ss; - node = contentElem.getFirstChild(); - while (node) { - if (node.getNodeType() == Node_base::ELEMENT_NODE) { - ss << node; - break; - } - node = node.getNextSibling(); - } - msg.content = ss.str(); - } else if(boost::iequals(contentElem.getLocalName(), "contentURL")) { - msg.contentURL.href = STRING_ATTR_OR_EXPR(contentElem, href); - msg.contentURL.maxAge = STRING_ATTR_OR_EXPR(contentElem, max-age); - msg.contentURL.fetchTimeout = STRING_ATTR_OR_EXPR(contentElem, fetchtimeout); - } - } - - //msg.content = msgElem.getAttributeNS(nameSpace, "Context"); - return msg; -} - -ExtensionNotification ExtensionNotification::fromXML(Arabica::DOM::Node<std::string> node, InterpreterImpl* interpreter) { - ExtensionNotification msg(ContextualizedRequest::fromXML(node, interpreter)); - FIND_EVENT_NODE(node); - - Element<std::string> msgElem(node); - msg.name = STRING_ATTR_OR_EXPR(msgElem, Name); - msg.type = EXTENSIONNOTIFICATION; - return msg; -} - -ExtensionNotification::operator Event() const { - Event ev = ContextualizedRequest::operator Event(); - if (name.length() > 0) { - ev.setName("mmi.extensionnotification." + name); - } else { - ev.setName("mmi.extensionnotification"); - } - return ev; -} - -StatusResponse StatusResponse::fromXML(Arabica::DOM::Node<std::string> node, InterpreterImpl* interpreter) { - StatusResponse msg(ContextualizedRequest::fromXML(node, interpreter)); - FIND_EVENT_NODE(node); - - Element<std::string> msgElem(node); - std::string status = STRING_ATTR_OR_EXPR(msgElem, Status); - - if (boost::iequals(status, "ALIVE")) { - msg.status = ALIVE; - } else if(boost::iequals(status, "DEAD")) { - msg.status = DEAD; - } else if(boost::iequals(status, "FAILURE")) { - msg.status = FAILURE; - } else if(boost::iequals(status, "SUCCESS")) { - msg.status = SUCCESS; - } - msg.type = STATUSRESPONSE; - return msg; -} - -StatusInfoResponse StatusInfoResponse::fromXML(Arabica::DOM::Node<std::string> node, InterpreterImpl* interpreter) { - StatusInfoResponse msg(StatusResponse::fromXML(node, interpreter)); - FIND_EVENT_NODE(node); - - Element<std::string> msgElem(node); - Element<std::string> statusInfoElem; - - node = msgElem.getFirstChild(); - while (node) { - if (node.getNodeType() == Node_base::ELEMENT_NODE) { - statusInfoElem = Element<std::string>(node); - if (statusInfoElem && boost::iequals(statusInfoElem.getLocalName(), "statusInfo")) - break; - } - node = node.getNextSibling(); - } - - if (statusInfoElem && boost::iequals(statusInfoElem.getLocalName(), "statusInfo")) { - node = statusInfoElem.getFirstChild(); - while (node) { - if (node.getNodeType() == Node_base::TEXT_NODE) { - msg.statusInfo = node.getNodeValue(); - break; - } - node = node.getNextSibling(); - } - } - return msg; -} - - -StatusRequest StatusRequest::fromXML(Arabica::DOM::Node<std::string> node, InterpreterImpl* interpreter) { - StatusRequest msg(ContextualizedRequest::fromXML(node, interpreter)); - FIND_EVENT_NODE(node); - - Element<std::string> msgElem(node); - std::string autoUpdate = STRING_ATTR_OR_EXPR(msgElem, RequestAutomaticUpdate); - - if (boost::iequals(autoUpdate, "true")) { - msg.automaticUpdate = true; - } else if(boost::iequals(autoUpdate, "on")) { - msg.automaticUpdate = true; - } else if(boost::iequals(autoUpdate, "yes")) { - msg.automaticUpdate = true; - } else if(boost::iequals(autoUpdate, "1")) { - msg.automaticUpdate = true; - } else { - msg.automaticUpdate = false; - } - msg.type = STATUSREQUEST; - return msg; -} - - -}
\ No newline at end of file diff --git a/src/uscxml/plugins/ioprocessor/modality/MMIMessages.h b/src/uscxml/plugins/ioprocessor/modality/MMIMessages.h deleted file mode 100644 index e4456f8..0000000 --- a/src/uscxml/plugins/ioprocessor/modality/MMIMessages.h +++ /dev/null @@ -1,499 +0,0 @@ -/** - * @file - * @author 2012-2013 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de) - * @copyright Simplified BSD - * - * @cond - * This program is free software: you can redistribute it and/or modify - * it under the terms of the FreeBSD license as published by the FreeBSD - * project. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the FreeBSD license along with this - * program. If not, see <http://www.opensource.org/licenses/bsd-license>. - * @endcond - */ - -#ifndef MMIEVENT_H_OS0SE7H5 -#define MMIEVENT_H_OS0SE7H5 - -#include <DOM/Node.hpp> -#include <DOM/Document.hpp> -#include <uscxml/Interpreter.h> - -namespace uscxml { - -class MMIEvent { -public: - enum Type { - NEWCONTEXTREQUEST, - NEWCONTEXTRESPONSE, - PREPAREREQUEST, - PREPARERESPONSE, - STARTREQUEST, - STARTRESPONSE, - DONENOTIFICATION, - CANCELREQUEST, - CANCELRESPONSE, - PAUSEREQUEST, - PAUSERESPONSE, - RESUMEREQUEST, - RESUMERESPONSE, - EXTENSIONNOTIFICATION, - CLEARCONTEXTREQUEST, - CLEARCONTEXTRESPONSE, - STATUSREQUEST, - STATUSRESPONSE, - INVALID - }; - - static Type getType(Arabica::DOM::Node<std::string> node); - - virtual Arabica::DOM::Document<std::string> toXML(bool encapsulateInMMI = false) const; - static MMIEvent fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL); - - // conversion operator - operator Event() const; - - std::string source; - std::string target; - std::string data; - std::string requestId; - std::string tagName; - Type type; - - static std::string nameSpace; - -protected: - MMIEvent() {} -}; - -class MMIEventReceiver { -public: - virtual void received(const MMIEvent& mmiEvent) = 0; -}; - -class MMIEventSender { -public: - virtual void send(const MMIEvent& mmiEvent) = 0; -}; - -class NewContextRequest : public MMIEvent { -public: - NewContextRequest() { - tagName = "NewContextRequest"; - type = NEWCONTEXTREQUEST; - } - NewContextRequest(const MMIEvent& father) : MMIEvent(father) {} - static NewContextRequest fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - MMIEvent event = MMIEvent::fromXML(node, interpreter); - event.type = NEWCONTEXTREQUEST; - return event; - } - operator Event() const { - Event ev = MMIEvent::operator Event(); - ev.setName("mmi.newcontextrequest"); - ev.setDOM(toXML()); - return ev; - } - std::string token; ///< special token for server-less modality components -}; - -class ContextualizedRequest : public MMIEvent { -public: - virtual Arabica::DOM::Document<std::string> toXML(bool encapsulateInMMI = false) const; - static ContextualizedRequest fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL); - operator Event() const; - std::string context; -protected: - ContextualizedRequest() {} - ContextualizedRequest(const MMIEvent& father) : MMIEvent(father) {} -}; - -class PauseRequest : public ContextualizedRequest { -public: - PauseRequest() { - tagName = "PauseRequest"; - type = PAUSEREQUEST; - } - PauseRequest(const ContextualizedRequest& father) : ContextualizedRequest(father) {} - static PauseRequest fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - PauseRequest event = ContextualizedRequest::fromXML(node, interpreter); - event.type = PAUSEREQUEST; - return event; - } - operator Event() const { - Event ev = ContextualizedRequest::operator Event(); - ev.setName("mmi.pauserequest"); - ev.setDOM(toXML()); - return ev; - } - -}; -class ResumeRequest : public ContextualizedRequest { -public: - ResumeRequest() { - tagName = "ResumeRequest"; - type = RESUMEREQUEST; - } - ResumeRequest(const ContextualizedRequest& father) : ContextualizedRequest(father) {} - static ResumeRequest fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - ResumeRequest event = ContextualizedRequest::fromXML(node, interpreter); - event.type = RESUMEREQUEST; - return event; - } - operator Event() const { - Event ev = ContextualizedRequest::operator Event(); - ev.setDOM(toXML()); - ev.setName("mmi.resumerequest"); - return ev; - } - -}; -class CancelRequest : public ContextualizedRequest { -public: - CancelRequest() { - tagName = "CancelRequest"; - type = CANCELREQUEST; - } - CancelRequest(const ContextualizedRequest& father) : ContextualizedRequest(father) {} - static CancelRequest fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - CancelRequest event = ContextualizedRequest::fromXML(node, interpreter); - event.type = CANCELREQUEST; - return event; - } - operator Event() const { - Event ev = ContextualizedRequest::operator Event(); - ev.setName("mmi.cancelrequest"); - ev.setDOM(toXML()); - return ev; - } - -}; -class ClearContextRequest : public ContextualizedRequest { -public: - ClearContextRequest() { - tagName = "ClearContextRequest"; - type = CLEARCONTEXTREQUEST; - } - ClearContextRequest(const ContextualizedRequest& father) : ContextualizedRequest(father) {} - static ClearContextRequest fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - ClearContextRequest event = ContextualizedRequest::fromXML(node, interpreter); - event.type = CLEARCONTEXTREQUEST; - return event; - } - operator Event() const { - Event ev = ContextualizedRequest::operator Event(); - ev.setName("mmi.clearcontextrequest"); - ev.setDOM(toXML()); - return ev; - } - -}; -class StatusRequest : public ContextualizedRequest { -public: - StatusRequest() { - tagName = "StatusRequest"; - type = STARTREQUEST; - } - virtual Arabica::DOM::Document<std::string> toXML(bool encapsulateInMMI = false) const; - static StatusRequest fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL); - operator Event() const; - bool automaticUpdate; -protected: - StatusRequest(const ContextualizedRequest& father) : ContextualizedRequest(father) {} -}; - -class ContentRequest : public ContextualizedRequest { -public: - struct ContentURL { - std::string href; - std::string maxAge; - std::string fetchTimeout; - }; - - virtual Arabica::DOM::Document<std::string> toXML(bool encapsulateInMMI = false) const; - static ContentRequest fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL); - operator Event() const; - std::string content; - ContentURL contentURL; -protected: - ContentRequest() {} - ContentRequest(const ContextualizedRequest& father) : ContextualizedRequest(father) {} -}; - -class PrepareRequest : public ContentRequest { -public: - PrepareRequest() { - tagName = "PrepareRequest"; - type = PREPAREREQUEST; - } - PrepareRequest(const ContentRequest& father) : ContentRequest(father) {} - static PrepareRequest fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - PrepareRequest event = ContentRequest::fromXML(node, interpreter); - event.type = PREPAREREQUEST; - return event; - } - operator Event() const { - Event ev = ContentRequest::operator Event(); - ev.setName("mmi.preparerequest"); - ev.setDOM(toXML()); - return ev; - } -}; - -class StartRequest : public ContentRequest { -public: - StartRequest() { - tagName = "StartRequest"; - type = STARTREQUEST; - } - StartRequest(const ContentRequest& father) : ContentRequest(father) {} - static StartRequest fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - StartRequest event = ContentRequest::fromXML(node, interpreter); - event.type = STARTREQUEST; - return event; - } - operator Event() const { - Event ev = ContentRequest::operator Event(); - ev.setName("mmi.startrequest"); - ev.setDOM(toXML()); - return ev; - } - -}; - -class ExtensionNotification : public ContextualizedRequest { -public: - ExtensionNotification() { - tagName = "ExtensionNotification"; - type = EXTENSIONNOTIFICATION; - } - virtual Arabica::DOM::Document<std::string> toXML(bool encapsulateInMMI = false) const; - static ExtensionNotification fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL); - operator Event() const; - std::string name; -protected: - ExtensionNotification(const ContextualizedRequest& father) : ContextualizedRequest(father) {} - -}; - -class StatusResponse : public ContextualizedRequest { -public: - enum Status { - ALIVE = 0, - DEAD = 1, - SUCCESS = 2, - FAILURE = 3 - }; - - StatusResponse() { - tagName = "StatusResponse"; - type = STATUSRESPONSE; - } - virtual Arabica::DOM::Document<std::string> toXML(bool encapsulateInMMI = false) const; - static StatusResponse fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL); - Status status; -protected: - StatusResponse(const ContextualizedRequest& father) : ContextualizedRequest(father) {} -}; - -class StatusInfoResponse : public StatusResponse { -public: - virtual Arabica::DOM::Document<std::string> toXML(bool encapsulateInMMI = false) const; - StatusInfoResponse(const StatusResponse& father) : StatusResponse(father) {} - static StatusInfoResponse fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL); - std::string statusInfo; -protected: - StatusInfoResponse() {} -}; - -class PrepareResponse : public StatusInfoResponse { -public: - PrepareResponse() { - tagName = "PrepareResponse"; - type = PREPARERESPONSE; - } - PrepareResponse(const StatusInfoResponse& father) : StatusInfoResponse(father) {} - static PrepareResponse fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - PrepareResponse event = StatusInfoResponse::fromXML(node, interpreter); - event.type = PREPARERESPONSE; - return event; - } - operator Event() const { - Event ev = StatusInfoResponse::operator Event(); - ev.setName("mmi.prepareresponse"); - ev.setDOM(toXML()); - return ev; - } -}; - -class StartResponse : public StatusInfoResponse { -public: - StartResponse() { - tagName = "StartResponse"; - type = STARTRESPONSE; - } - StartResponse(const StatusInfoResponse& father) : StatusInfoResponse(father) {} - static StartResponse fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - StartResponse event = StatusInfoResponse::fromXML(node, interpreter); - event.type = STARTRESPONSE; - return event; - } - operator Event() const { - Event ev = StatusInfoResponse::operator Event(); - ev.setName("mmi.startresponse"); - ev.setDOM(toXML()); - return ev; - } -}; - -class CancelResponse : public StatusInfoResponse { -public: - CancelResponse() { - tagName = "CancelResponse"; - type = CANCELRESPONSE; - } - CancelResponse(const StatusInfoResponse& father) : StatusInfoResponse(father) {} - static CancelResponse fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - CancelResponse event = StatusInfoResponse::fromXML(node, interpreter); - event.type = CANCELRESPONSE; - return event; - } - operator Event() const { - Event ev = StatusInfoResponse::operator Event(); - ev.setName("mmi.cancelresponse"); - ev.setDOM(toXML()); - return ev; - } -}; - -class PauseResponse : public StatusInfoResponse { -public: - PauseResponse() { - tagName = "PauseResponse"; - type = PAUSERESPONSE; - } - PauseResponse(const StatusInfoResponse& father) : StatusInfoResponse(father) {} - static PauseResponse fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - PauseResponse event = StatusInfoResponse::fromXML(node, interpreter); - event.type = PAUSERESPONSE; - return event; - } - operator Event() const { - Event ev = StatusInfoResponse::operator Event(); - ev.setName("mmi.pauseresponse"); - ev.setDOM(toXML()); - return ev; - } -}; - -class ResumeResponse : public StatusInfoResponse { -public: - ResumeResponse() { - tagName = "ResumeResponse"; - type = RESUMERESPONSE; - } - ResumeResponse(const StatusInfoResponse& father) : StatusInfoResponse(father) {} - static ResumeResponse fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - ResumeResponse event = StatusInfoResponse::fromXML(node, interpreter); - event.type = RESUMERESPONSE; - return event; - } - operator Event() const { - Event ev = StatusInfoResponse::operator Event(); - ev.setName("mmi.resumeresponse"); - ev.setDOM(toXML()); - return ev; - } -}; - -class ClearContextResponse : public StatusInfoResponse { -public: - ClearContextResponse() { - tagName = "ClearContextResponse"; - type = CLEARCONTEXTRESPONSE; - } - ClearContextResponse(const StatusInfoResponse& father) : StatusInfoResponse(father) {} - static ClearContextResponse fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - ClearContextResponse event = StatusInfoResponse::fromXML(node, interpreter); - event.type = CLEARCONTEXTRESPONSE; - return event; - } - operator Event() const { - Event ev = StatusInfoResponse::operator Event(); - ev.setName("mmi.clearcontextresponse"); - ev.setDOM(toXML()); - return ev; - } -}; - -class NewContextResponse : public StatusInfoResponse { -public: - NewContextResponse() { - tagName = "NewContextResponse"; - type = NEWCONTEXTRESPONSE; - } - NewContextResponse(const StatusInfoResponse& father) : StatusInfoResponse(father) {} - static NewContextResponse fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - NewContextResponse event = StatusInfoResponse::fromXML(node, interpreter); - event.type = NEWCONTEXTRESPONSE; - return event; - } - operator Event() const { - Event ev = StatusInfoResponse::operator Event(); - ev.setName("mmi.newcontextresponse"); - ev.setDOM(toXML()); - return ev; - } - -}; - -class DoneNotification : public StatusInfoResponse { -public: - DoneNotification() { - tagName = "DoneNotification"; - type = DONENOTIFICATION; - } - DoneNotification(const StatusInfoResponse& father) : StatusInfoResponse(father) {} - static DoneNotification fromXML(Arabica::DOM::Node<std::string> node, - InterpreterImpl* interpreter = NULL) { - DoneNotification event = StatusInfoResponse::fromXML(node, interpreter); - event.type = DONENOTIFICATION; - return event; - } - operator Event() const { - Event ev = StatusInfoResponse::operator Event(); - ev.setName("mmi.donenotification"); - ev.setDOM(toXML()); - return ev; - } -}; - -} - -#endif /* end of include guard: MMIEVENT_H_OS0SE7H5 */ |