diff options
author | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2012-09-08 23:26:39 (GMT) |
---|---|---|
committer | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2012-09-08 23:26:39 (GMT) |
commit | aa6c3a1257a29cc5bcf8b94893732ee553f27582 (patch) | |
tree | 625adb1a353a17ffed2c7e0bac686d705aaec93f /src/uscxml/Message.h | |
download | uscxml-aa6c3a1257a29cc5bcf8b94893732ee553f27582.zip uscxml-aa6c3a1257a29cc5bcf8b94893732ee553f27582.tar.gz uscxml-aa6c3a1257a29cc5bcf8b94893732ee553f27582.tar.bz2 |
Initial upload
Still somewhat quirky to build but fairly feature complete
Diffstat (limited to 'src/uscxml/Message.h')
-rw-r--r-- | src/uscxml/Message.h | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/src/uscxml/Message.h b/src/uscxml/Message.h new file mode 100644 index 0000000..a520ff5 --- /dev/null +++ b/src/uscxml/Message.h @@ -0,0 +1,122 @@ +#ifndef EVENT_H_XZAQ4HR +#define EVENT_H_XZAQ4HR + +#include <map> +#include <vector> +#include <string> + +#include <DOM/Document.hpp> +#include <DOM/io/Stream.hpp> + +#define TAGNAME(elem) ((Arabica::DOM::Element<std::string>)elem).getTagName() +#define ATTR(elem, attr) ((Arabica::DOM::Element<std::string>)elem).getAttribute(attr) +#define HAS_ATTR(elem, attr) ((Arabica::DOM::Element<std::string>)elem).hasAttribute(attr) + +namespace uscxml { + +class Data { +public: + enum Type { + VERBATIM, + INTERPRETED + }; + + Data() {} + Data(const std::string& atom_, Type type_ = INTERPRETED) : atom(atom_), type(type_) {} + virtual ~Data() {} + + static Data fromXML(const std::string& xmlString); + Arabica::DOM::Document<std::string> toDocument(); + std::string toXMLString() { + std::stringstream ss; + ss << toDocument(); + return ss.str(); + } + + std::map<std::string, Data> compound; + std::vector<Data> array; + std::string atom; + Type type; + +protected: + Arabica::DOM::Document<std::string> toNode(const Arabica::DOM::Document<std::string>& factory, const Data& data); + +#ifndef SWIGJAVA + friend std::ostream& operator<< (std::ostream& os, const Data& data); +#endif +}; + +class Event : public Data { +public: + enum Type { + PLATFORM, + INTERNAL, + EXTERNAL + }; + + Event() : type(INTERNAL) {} + + std::string name; + Type type; + std::string origin; + std::string origintype; + Arabica::DOM::Node<std::string> dom; + std::string sendid; + std::string invokeid; + + static Event fromXML(const std::string& xmlString); + Arabica::DOM::Document<std::string> toDocument(); + std::string toXMLString() { + std::stringstream ss; + ss << toDocument(); + return ss.str(); + } + +#ifndef SWIGJAVA + friend std::ostream& operator<< (std::ostream& os, const Event& event); +#endif +}; + +class InvokeRequest : public Event { +public: + std::string type; + std::string src; + std::string namelist; + bool autoForward; + Arabica::DOM::Node<std::string> finalize; + std::map<std::string, std::string> params; + std::string content; + + static InvokeRequest fromXML(const std::string& xmlString); + Arabica::DOM::Document<std::string> toDocument(); + std::string toXMLString() { + std::stringstream ss; + ss << toDocument(); + return ss.str(); + } + +}; + +class SendRequest : public Event { +public: + std::string target; + std::string type; + uint32_t delayMs; + std::map<std::string, std::string> params; + std::map<std::string, std::string> namelist; + std::string content; + + static SendRequest fromXML(const std::string& xmlString); + Arabica::DOM::Document<std::string> toDocument(); + std::string toXMLString() { + std::stringstream ss; + ss << toDocument(); + return ss.str(); + } + +}; + +} + + +#endif /* end of include guard: EVENT_H_XZAQ4HR */ |