summaryrefslogtreecommitdiffstats
path: root/src/uscxml/plugins
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
parentfe941ab36b44f083886c07a72d371b2cfba55fe3 (diff)
downloaduscxml-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.txt38
-rw-r--r--src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp2
-rw-r--r--src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.cpp87
-rw-r--r--src/uscxml/plugins/invoker/vxml/VoiceXMLInvoker.h25
-rw-r--r--src/uscxml/plugins/ioprocessor/modality/MMIMessages.cpp436
-rw-r--r--src/uscxml/plugins/ioprocessor/modality/MMIMessages.h499
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 */