diff options
author | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-04-14 08:43:05 (GMT) |
---|---|---|
committer | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-04-14 08:43:05 (GMT) |
commit | 01e7e16d34b23b1198455809860abe4e43d9606a (patch) | |
tree | 8b184a60e812a2cd835d15cb304d6a46792ca9e3 | |
parent | a22c9ab9c1a72bee6802dc8ada771930253f140b (diff) | |
download | uscxml-01e7e16d34b23b1198455809860abe4e43d9606a.zip uscxml-01e7e16d34b23b1198455809860abe4e43d9606a.tar.gz uscxml-01e7e16d34b23b1198455809860abe4e43d9606a.tar.bz2 |
Apps working again
-rw-r--r-- | CMakeLists.txt | 20 | ||||
-rw-r--r-- | apps/samples/server-push/server-push.scxml | 14 | ||||
-rw-r--r-- | apps/samples/vrml/vrml-server.scxml | 35 | ||||
-rw-r--r-- | contrib/ctest/run-tests.vbs | 3 | ||||
-rw-r--r-- | src/uscxml/Factory.cpp | 4 | ||||
-rw-r--r-- | src/uscxml/Interpreter.cpp | 3 | ||||
-rw-r--r-- | src/uscxml/interpreter/InterpreterDraft6.cpp | 12 | ||||
-rw-r--r-- | src/uscxml/plugins/element/postpone/PostponeElement.cpp | 2 | ||||
-rw-r--r-- | src/uscxml/plugins/element/respond/RespondElement.cpp (renamed from src/uscxml/plugins/element/response/ResponseElement.cpp) | 34 | ||||
-rw-r--r-- | src/uscxml/plugins/element/respond/RespondElement.h (renamed from src/uscxml/plugins/element/response/ResponseElement.h) | 16 | ||||
-rw-r--r-- | test/src/test-url.cpp | 6 |
11 files changed, 75 insertions, 74 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 05ecd83..fea1b5b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -538,21 +538,21 @@ else() endif() -# Response element +# Respond element -file(GLOB_RECURSE RESPONSE_ELEMENT - src/uscxml/plugins/element/response/*.cpp - src/uscxml/plugins/element/response/*.h +file(GLOB_RECURSE RESPOND_ELEMENT + src/uscxml/plugins/element/respond/*.cpp + src/uscxml/plugins/element/respond/*.h ) -source_group("Element\\response" FILES ${RESPONSE_ELEMENT}) +source_group("Element\\respond" FILES ${RESPOND_ELEMENT}) if (BUILD_AS_PLUGINS) add_library( - element_response SHARED - ${RESPONSE_ELEMENT}) - target_link_libraries(element_response uscxml) - set_target_properties(element_response PROPERTIES FOLDER "Plugin Element") + element_respond SHARED + ${RESPOND_ELEMENT}) + target_link_libraries(element_respond uscxml) + set_target_properties(element_respond PROPERTIES FOLDER "Plugin Element") else() - list (APPEND USCXML_FILES ${RESPONSE_ELEMENT}) + list (APPEND USCXML_FILES ${RESPOND_ELEMENT}) endif() diff --git a/apps/samples/server-push/server-push.scxml b/apps/samples/server-push/server-push.scxml index 4193560..a9d231e 100644 --- a/apps/samples/server-push/server-push.scxml +++ b/apps/samples/server-push/server-push.scxml @@ -17,27 +17,27 @@ <!-- XHR CORS preflight response --> <transition event="http.options" target="idle"> <script>dump(_event);</script> - <response status="200" requestexpr="_event.origin"> + <respond status="200" to="_event.origin"> <header name="Access-Control-Allow-Origin" value="*" /> <header name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS" /> <header name="Access-Control-Allow-Headers" value="X-Requested-With, Content-Type" /> - </response> + </respond> </transition> <transition event="http.post" target="idle"> <if cond="_event.name.endsWith('postponed')"> <!-- This is an event we postponed before the heartbeat, respond --> - <response requestexpr="_event.origin"> + <respond to="_event.origin"> <content>This is awesome!</content> - </response> - <else /> + </respond> + <else /> <!-- Postpone until the heartbeat is emitted and send all events again --> <postpone until="_event.name == 'heartbeat.1s'" chaining="true" /> </if> </transition> <transition event="http.get"> - <response requestexpr="_event.origin"> + <respond to="_event.origin"> <content> <![CDATA[ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> @@ -74,7 +74,7 @@ </html> ]]> </content> - </response> + </respond> </transition> </state> diff --git a/apps/samples/vrml/vrml-server.scxml b/apps/samples/vrml/vrml-server.scxml index 0d6517c..6f376e8 100644 --- a/apps/samples/vrml/vrml-server.scxml +++ b/apps/samples/vrml/vrml-server.scxml @@ -255,6 +255,9 @@ <!-- Idle here --> <state id="idle"> + <!--onentry> + <log expr="_event" /> + </onentry --> <transition event="http.get" target="idle" cond=" _event.data.pathComponent.length >= 2 && _event.data.pathComponent[_event.data.pathComponent.length - 1].indexOf('.') !== -1"> @@ -275,19 +278,19 @@ <script> //print("Sending " + processed[_event['fileStruct'].key][_event['fileStruct'].format].path + "\n"); </script> - <response status="200" requestexpr="_event.origin"> + <respond status="200" to="_event.origin"> <header name="Connection" value="close" /> <header name="Access-Control-Allow-Origin" value="*" /> <content fileexpr="processed[_event['fileStruct'].key][_event['fileStruct'].format].path" /> - </response> + </respond> <else> <if cond="_event.name.endsWith('postponed')"> <!-- A postponed event we couldn't answer --> - <response status="404" requestexpr="_event.origin"> + <respond status="404" to="_event.origin"> <header name="Connection" value="close" /> - </response> + </respond> <else> <script> print("Processing outfile " + _event['dest'] + " from model " + _event['file'] + "\n"); @@ -322,9 +325,9 @@ </if> <else> <!-- There is no such model --> - <response status="404" requestexpr="_event.origin"> + <respond status="404" to="_event.origin"> <header name="Connection" value="close" /> - </response> + </respond> </else> </if> </transition> @@ -336,58 +339,58 @@ _event.data.pathComponent.length == 2 && _event.data.pathComponent[1] === 'models'"> <script>//dump(_event)</script> - <response status="200" requestexpr="_event.origin"> + <respond status="200" to="_event.origin"> <header name="Connection" value="close" /> <header name="Content-Type" value="application/json" /> <header name="Access-Control-Allow-Origin" value="*" /> <content expr="models" /> - </response> + </respond> </transition> <transition event="http.get" target="idle" cond=" _event.data.pathComponent.length == 2 && _event.data.pathComponent[1] === 'processed'"> <script>//dump(_event)</script> - <response status="200" requestexpr="_event.origin"> + <respond status="200" to="_event.origin"> <header name="Connection" value="close" /> <header name="Content-Type" value="application/json" /> <header name="Access-Control-Allow-Origin" value="*" /> <content expr="processed" /> - </response> + </respond> </transition> <transition event="http.get" target="idle" cond=" _event.data.pathComponent.length == 2 && _event.data.pathComponent[1] === 'wrls'"> <script>//dump(_event)</script> - <response status="200" requestexpr="_event.origin"> + <respond status="200" to="_event.origin"> <header name="Connection" value="close" /> <header name="Content-Type" value="application/json" /> <header name="Access-Control-Allow-Origin" value="*" /> <content expr="wrls" /> - </response> + </respond> </transition> <!-- request for topmost list of all files --> <transition event="http.get" target="idle" cond=" _event.data.pathComponent.length == 1"> <script>//dump(_event);</script> - <response status="200" requestexpr="_event.origin"> + <respond status="200" to="_event.origin"> <header name="Connection" value="close" /> <header name="Content-Type" value="application/json" /> <header name="Access-Control-Allow-Origin" value="*" /> <content expr="overviewList()" /> - </response> + </respond> </transition> <!-- XHR CORS preflight response --> <transition event="http.options" target="idle"> <script>dump(_event);</script> - <response status="200" requestexpr="_event.origin"> + <respond status="200" to="_event.origin"> <header name="Access-Control-Allow-Origin" value="*" /> <header name="Access-Control-Allow-Methods" value="GET, OPTIONS" /> <header name="Access-Control-Allow-Headers" value="X-Requested-With" /> - </response> + </respond> </transition> </state> diff --git a/contrib/ctest/run-tests.vbs b/contrib/ctest/run-tests.vbs index 66e187b..03e2774 100644 --- a/contrib/ctest/run-tests.vbs +++ b/contrib/ctest/run-tests.vbs @@ -79,10 +79,9 @@ if (CTEST_SUBMIT_TYPE = "Continuous") Then End If shell.CurrentDirectory = TEST_DIR -Set exec = shell.Exec("CMD /S /C ctest -VV --timeout 100 -S " + TESTFILE + " 2>&1") +Set exec = shell.Exec("CMD /S /K ctest -VV --timeout 100 -S " + TESTFILE + " 2>&1") Do While exec.Status = 0 WScript.Sleep 10 WScript.StdOut.Write(exec.StdOut.ReadLine() & vbCRLF) ' WScript.StdErr.Write(exec.StdErr.ReadLine()) Loop -WScript.Sleep 1000000
\ No newline at end of file diff --git a/src/uscxml/Factory.cpp b/src/uscxml/Factory.cpp index c74196a..76da139 100644 --- a/src/uscxml/Factory.cpp +++ b/src/uscxml/Factory.cpp @@ -52,7 +52,7 @@ # include "uscxml/plugins/element/fetch/FetchElement.h" -# include "uscxml/plugins/element/response/ResponseElement.h" +# include "uscxml/plugins/element/respond/RespondElement.h" # include "uscxml/plugins/element/postpone/PostponeElement.h" @@ -194,7 +194,7 @@ Factory::Factory() { registerExecutableContent(element); } { - ResponseElement* element = new ResponseElement(); + RespondElement* element = new RespondElement(); registerExecutableContent(element); } { diff --git a/src/uscxml/Interpreter.cpp b/src/uscxml/Interpreter.cpp index 27fd10b..de2b8b5 100644 --- a/src/uscxml/Interpreter.cpp +++ b/src/uscxml/Interpreter.cpp @@ -1191,7 +1191,8 @@ void InterpreterImpl::executeContent(const Arabica::DOM::Node<std::string>& cont if (_executableContent.find(content) == _executableContent.end()) { execContent = Factory::createExecutableContent(content.getLocalName(), content.getNamespaceURI(), this); if (!execContent) { - LOG(ERROR) << "No custom executable content known for " << content.getLocalName() << " in " << content.getNamespaceURI(); + LOG(ERROR) << "No custom executable content known for '" + << content.getLocalName() << "' in namespace '" << content.getNamespaceURI() << "'"; return; } _executableContent[content] = execContent; diff --git a/src/uscxml/interpreter/InterpreterDraft6.cpp b/src/uscxml/interpreter/InterpreterDraft6.cpp index d3019d9..ef40362 100644 --- a/src/uscxml/interpreter/InterpreterDraft6.cpp +++ b/src/uscxml/interpreter/InterpreterDraft6.cpp @@ -379,14 +379,12 @@ bool InterpreterDraft6::isEnabledTransition(const Node<std::string>& transition, std::vector<std::string> eventNames = tokenizeIdRefs(eventName); - if (eventNames.size() > 0 && hasConditionMatch(transition)) { - std::vector<std::string>::iterator eventIter = eventNames.begin(); - while(eventIter != eventNames.end()) { - if(nameMatch(*eventIter, event)) { - return true; - } - eventIter++; + std::vector<std::string>::iterator eventIter = eventNames.begin(); + while(eventIter != eventNames.end()) { + if(nameMatch(*eventIter, event) && hasConditionMatch(transition)) { + return true; } + eventIter++; } return false; } diff --git a/src/uscxml/plugins/element/postpone/PostponeElement.cpp b/src/uscxml/plugins/element/postpone/PostponeElement.cpp index 54f2499..3c1d1b8 100644 --- a/src/uscxml/plugins/element/postpone/PostponeElement.cpp +++ b/src/uscxml/plugins/element/postpone/PostponeElement.cpp @@ -112,7 +112,7 @@ void PostponeElement::Resubmitter::onStableConfiguration(Interpreter interpreter // LOG(INFO) << " -> is TRUE"; eventIter->event.name += ".postponed"; interpreter.receive(eventIter->event, true); - _postponedEvents.erase(eventIter); + _postponedEvents.erase(eventIter++); dispatched = true; } // LOG(INFO) << " -> is FALSE"; diff --git a/src/uscxml/plugins/element/response/ResponseElement.cpp b/src/uscxml/plugins/element/respond/RespondElement.cpp index 675bc1e..3c47b83 100644 --- a/src/uscxml/plugins/element/response/ResponseElement.cpp +++ b/src/uscxml/plugins/element/respond/RespondElement.cpp @@ -1,4 +1,4 @@ -#include "ResponseElement.h" +#include "RespondElement.h" #include "uscxml/plugins/invoker/http/HTTPServletInvoker.h" #include <glog/logging.h> @@ -11,35 +11,35 @@ namespace uscxml { #ifdef BUILD_AS_PLUGINS PLUMA_CONNECTOR bool connect(pluma::Host& host) { - host.add( new ResponseElementProvider() ); + host.add( new RespondElementProvider() ); return true; } #endif -boost::shared_ptr<ExecutableContentImpl> ResponseElement::create(InterpreterImpl* interpreter) { - boost::shared_ptr<ResponseElement> invoker = boost::shared_ptr<ResponseElement>(new ResponseElement()); +boost::shared_ptr<ExecutableContentImpl> RespondElement::create(InterpreterImpl* interpreter) { + boost::shared_ptr<RespondElement> invoker = boost::shared_ptr<RespondElement>(new RespondElement()); invoker->_interpreter = interpreter; return invoker; } -void ResponseElement::enterElement(const Arabica::DOM::Node<std::string>& node) { +void RespondElement::enterElement(const Arabica::DOM::Node<std::string>& node) { // try to get the request id - if (!HAS_ATTR(node, "request") && !HAS_ATTR(node, "requestexpr")) { - LOG(ERROR) << "Response element requires request or requestexpr"; + if (!HAS_ATTR(node, "to")) { + LOG(ERROR) << "Respond element requires to attribute"; return; } - if (HAS_ATTR(node, "requestexpr") && !_interpreter->getDataModel()) { - LOG(ERROR) << "Response element with requestexpr requires datamodel"; + if (HAS_ATTR(node, "to") && !_interpreter->getDataModel()) { + LOG(ERROR) << "Respond element with to requires datamodel"; return; } - std::string requestId = (HAS_ATTR(node, "request") ? ATTR(node, "request") : _interpreter->getDataModel().evalAsString(ATTR(node, "requestexpr"))); + std::string requestId = _interpreter->getDataModel().evalAsString(ATTR(node, "to")); // try to get the request object InterpreterServlet* servlet = _interpreter->getHTTPServlet(); tthread::lock_guard<tthread::recursive_mutex> lock(servlet->getMutex()); if (servlet->getRequests().find(requestId) == servlet->getRequests().end()) { - LOG(ERROR) << "No matching HTTP request for response element"; + LOG(ERROR) << "No matching HTTP request for respond element"; return; } @@ -52,7 +52,7 @@ void ResponseElement::enterElement(const Arabica::DOM::Node<std::string>& node) // get the status or default to 200 std::string statusStr = (HAS_ATTR(node, "status") ? ATTR(node, "status") : "200"); if (!isNumeric(statusStr.c_str(), 10)) { - LOG(ERROR) << "Response element with non-numeric status " << statusStr; + LOG(ERROR) << "Respond element with non-numeric status " << statusStr; return; } httpReply.status = strTo<int>(statusStr);; @@ -66,7 +66,7 @@ void ResponseElement::enterElement(const Arabica::DOM::Node<std::string>& node) std::string contentValue = _interpreter->getDataModel().evalAsString(ATTR(contents[0], "expr")); httpReply.content = contentValue; } catch (Event e) { - LOG(ERROR) << "Syntax error with expr in content child of response element:" << std::endl << e << std::endl; + LOG(ERROR) << "Syntax error with expr in content child of Respond element:" << std::endl << e << std::endl; return; } } else { @@ -80,7 +80,7 @@ void ResponseElement::enterElement(const Arabica::DOM::Node<std::string>& node) try { file = "file://" + _interpreter->getDataModel().evalAsString(ATTR(contents[0], "fileexpr")); } catch (Event e) { - LOG(ERROR) << "Syntax error with fileexpr in content child of response element:" << std::endl << e << std::endl; + LOG(ERROR) << "Syntax error with fileexpr in content child of Respond element:" << std::endl << e << std::endl; return; } } @@ -117,7 +117,7 @@ void ResponseElement::enterElement(const Arabica::DOM::Node<std::string>& node) try { name = _interpreter->getDataModel().evalAsString(ATTR(headers[i], "nameexpr")); } catch (Event e) { - LOG(ERROR) << "Syntax error with nameexpr in header child of response element:" << std::endl << e << std::endl; + LOG(ERROR) << "Syntax error with nameexpr in header child of Respond element:" << std::endl << e << std::endl; return; } } else { @@ -137,7 +137,7 @@ void ResponseElement::enterElement(const Arabica::DOM::Node<std::string>& node) try { value = _interpreter->getDataModel().evalAsString(ATTR(headers[i], "expr")); } catch (Event e) { - LOG(ERROR) << "Syntax error with expr in header child of response element:" << std::endl << e << std::endl; + LOG(ERROR) << "Syntax error with expr in header child of Respond element:" << std::endl << e << std::endl; return; } } else { @@ -157,7 +157,7 @@ void ResponseElement::enterElement(const Arabica::DOM::Node<std::string>& node) servlet->getRequests().erase(requestId); } -void ResponseElement::exitElement(const Arabica::DOM::Node<std::string>& node) { +void RespondElement::exitElement(const Arabica::DOM::Node<std::string>& node) { } diff --git a/src/uscxml/plugins/element/response/ResponseElement.h b/src/uscxml/plugins/element/respond/RespondElement.h index 333dd98..c53d60a 100644 --- a/src/uscxml/plugins/element/response/ResponseElement.h +++ b/src/uscxml/plugins/element/respond/RespondElement.h @@ -1,5 +1,5 @@ -#ifndef RESPONSEELEMENT_H_I11KQ39Q -#define RESPONSEELEMENT_H_I11KQ39Q +#ifndef RESPONDELEMENT_H_I11KQ39Q +#define RESPONDELEMENT_H_I11KQ39Q #include <uscxml/Interpreter.h> @@ -9,14 +9,14 @@ namespace uscxml { -class ResponseElement : public ExecutableContentImpl { +class RespondElement : public ExecutableContentImpl { public: - ResponseElement() {} - virtual ~ResponseElement() {} + RespondElement() {} + virtual ~RespondElement() {} boost::shared_ptr<ExecutableContentImpl> create(InterpreterImpl* interpreter); std::string getLocalName() { - return "response"; + return "respond"; } std::string getNamespace() { @@ -33,10 +33,10 @@ public: }; #ifdef BUILD_AS_PLUGINS -PLUMA_INHERIT_PROVIDER(ResponseElement, ExecutableContentImpl); +PLUMA_INHERIT_PROVIDER(RespondElement, ExecutableContentImpl); #endif } -#endif /* end of include guard: RESPONSEELEMENT_H_I11KQ39Q */ +#endif /* end of include guard: RESPONDELEMENT_H_I11KQ39Q */ diff --git a/test/src/test-url.cpp b/test/src/test-url.cpp index 5e8ea02..86fcb9f 100644 --- a/test/src/test-url.cpp +++ b/test/src/test-url.cpp @@ -29,9 +29,9 @@ public: int main(int argc, char** argv) { { - Interpreter interpreter = Interpreter::fromURI("https://raw.github.com/tklab-tud/uscxml/master/test/samples/uscxml/test-execution.scxml"); - assert(interpreter); - interpreter.interpret(); +// Interpreter interpreter = Interpreter::fromURI("https://raw.github.com/tklab-tud/uscxml/master/test/samples/uscxml/test-execution.scxml"); +// assert(interpreter); +// interpreter.interpret(); } { |