summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordknn <yoann.blein@free.fr>2012-08-10 18:04:56 (GMT)
committerdknn <yoann.blein@free.fr>2012-09-22 09:32:38 (GMT)
commit955c4589ca254814ae7ec6ed911e0a62febc5da1 (patch)
tree1d3ba8ecc732f8239462f7428e758224f3d38b94 /Swiften/Serializer/PayloadSerializers/InputEventSerializer.cpp
parent577fffec4a1da6909740a392cf76617bdcbe5570 (diff)
downloadswift-contrib-955c4589ca254814ae7ec6ed911e0a62febc5da1.zip
swift-contrib-955c4589ca254814ae7ec6ed911e0a62febc5da1.tar.bz2
Capture and send user UI events
Diffstat (limited to 'Swiften/Serializer/PayloadSerializers/InputEventSerializer.cpp')
-rw-r--r--Swiften/Serializer/PayloadSerializers/InputEventSerializer.cpp85
1 files changed, 85 insertions, 0 deletions
diff --git a/Swiften/Serializer/PayloadSerializers/InputEventSerializer.cpp b/Swiften/Serializer/PayloadSerializers/InputEventSerializer.cpp
new file mode 100644
index 0000000..5692308
--- /dev/null
+++ b/Swiften/Serializer/PayloadSerializers/InputEventSerializer.cpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2012 Yoann Blein
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+#include <Swiften/Serializer/PayloadSerializers/InputEventSerializer.h>
+
+#include <boost/smart_ptr/make_shared.hpp>
+#include <boost/lexical_cast.hpp>
+
+#include <Swiften/Base/foreach.h>
+#include <Swiften/Serializer/XML/XMLElement.h>
+
+namespace Swift {
+
+std::string InputEventSerializer::serializePayload(boost::shared_ptr<InputEventPayload> payload) const {
+ XMLElement inputevt("inputevt", "http://sip-comunicator.org/protocol/inputevt");
+ inputevt.setAttribute("action", actionToString(payload->getAction()));
+
+ XMLElement::ref remoteControlNode = boost::make_shared<XMLElement>("remote-control", "http://sip-communicator.org/protocol/inputevt");
+ foreach (InputEventPayload::Event event, payload->getEvents()) {
+ XMLElement::ref eventNode = boost::make_shared<XMLElement>(eventTypeToString(event.type));
+ switch (event.type) {
+ case InputEventPayload::Event::MouseMove:
+ eventNode->setAttribute("x", boost::lexical_cast<std::string>(event.realArg1));
+ eventNode->setAttribute("y", boost::lexical_cast<std::string>(event.realArg2));
+ break;
+ case InputEventPayload::Event::MouseWheel:
+ eventNode->setAttribute("notch", boost::lexical_cast<std::string>(event.integerArg));
+ break;
+ case InputEventPayload::Event::MousePress:
+ case InputEventPayload::Event::MouseRelease:
+ eventNode->setAttribute("btns", boost::lexical_cast<std::string>(event.integerArg));
+ break;
+ case InputEventPayload::Event::KeyType:
+ eventNode->setAttribute("keychar", boost::lexical_cast<std::string>(event.integerArg));
+ break;
+ case InputEventPayload::Event::KeyPress:
+ case InputEventPayload::Event::KeyRelease:
+ eventNode->setAttribute("keycode", boost::lexical_cast<std::string>(event.integerArg));
+ break;
+ default:
+ break;
+ }
+ remoteControlNode->addNode(eventNode);
+ }
+
+ inputevt.addNode(remoteControlNode);
+ return inputevt.serialize();
+}
+
+std::string InputEventSerializer::actionToString(InputEventPayload::Action action) {
+ switch (action) {
+ case InputEventPayload::Notify:
+ return "notify";
+ default:
+ std::cerr << "Serializing unknown action." << std::endl;
+ }
+ return "";
+}
+
+std::string InputEventSerializer::eventTypeToString(InputEventPayload::Event::EventType eventType) {
+ switch (eventType) {
+ case InputEventPayload::Event::MouseMove:
+ return "mouse-move";
+ case InputEventPayload::Event::MousePress:
+ return "mouse-press";
+ case InputEventPayload::Event::MouseRelease:
+ return "mouse-release";
+ case InputEventPayload::Event::MouseWheel:
+ return "mouse-wheel";
+ case InputEventPayload::Event::KeyPress:
+ return "key-press";
+ case InputEventPayload::Event::KeyRelease:
+ return "key-release";
+ case InputEventPayload::Event::KeyType:
+ return "key-type";
+ default:
+ std::cerr << "Serializing unknown event type." << std::endl;
+ }
+ return "";
+}
+
+}