summaryrefslogtreecommitdiff
path: root/louloulibs/xmpp/adhoc_session.hpp
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2015-05-28 23:42:52 +0200
committerFlorent Le Coz <louiz@louiz.org>2015-05-28 23:46:24 +0200
commite1a7114c8daa10589c830ce972cf461c3540111b (patch)
tree3b9fc79a881b252248d30c8e797bed13f131e90b /louloulibs/xmpp/adhoc_session.hpp
parent897b281e67dc82700db9fd9c2dedc5e01e5871ee (diff)
downloadbiboumi-e1a7114c8daa10589c830ce972cf461c3540111b.tar.gz
biboumi-e1a7114c8daa10589c830ce972cf461c3540111b.tar.bz2
biboumi-e1a7114c8daa10589c830ce972cf461c3540111b.tar.xz
biboumi-e1a7114c8daa10589c830ce972cf461c3540111b.zip
louloulibs is directly included, instead of being a submodule
Because this is a nightmare to manage
Diffstat (limited to 'louloulibs/xmpp/adhoc_session.hpp')
m---------louloulibs0
-rw-r--r--louloulibs/xmpp/adhoc_session.hpp70
2 files changed, 70 insertions, 0 deletions
diff --git a/louloulibs b/louloulibs
deleted file mode 160000
-Subproject 0f3c1183e2bf0941ae2bffd3f31577bce4f3001
diff --git a/louloulibs/xmpp/adhoc_session.hpp b/louloulibs/xmpp/adhoc_session.hpp
new file mode 100644
index 0000000..ddfb2fe
--- /dev/null
+++ b/louloulibs/xmpp/adhoc_session.hpp
@@ -0,0 +1,70 @@
+#ifndef ADHOC_SESSION_HPP
+# define ADHOC_SESSION_HPP
+
+#include <xmpp/xmpp_stanza.hpp>
+
+#include <functional>
+#include <string>
+
+class XmppComponent;
+
+class AdhocCommand;
+class AdhocSession;
+
+/**
+ * A function executed as an ad-hoc command step. It takes a <command/>
+ * XmlNode and modifies it accordingly (inserting for example an <error/>
+ * node, or a data form…).
+ * TODO fix this:
+ * It also must call one of step_passed(), cancel() etc on the AdhocSession object.
+ */
+typedef std::function<void(XmppComponent*, AdhocSession&, XmlNode&)> AdhocStep;
+
+class AdhocSession
+{
+public:
+ explicit AdhocSession(const AdhocCommand& command, const std::string& jid);
+ ~AdhocSession();
+ /**
+ * Return the function to be executed, found in our AdhocCommand, for the
+ * current_step. And increment the current_step.
+ */
+ const AdhocStep& get_next_step();
+ /**
+ * Return the number of remaining steps.
+ */
+ size_t remaining_steps() const;
+ /**
+ * This may be modified by an AdhocStep, to indicate that this session
+ * should no longer exist, because we encountered an error, and we can't
+ * execute any more step of it.
+ */
+ void terminate();
+ bool is_terminated() const;
+
+private:
+ /**
+ * A reference of the command concerned by this session. Used for example
+ * to get the next step of that command, things like that.
+ */
+ const AdhocCommand& command;
+ /**
+ * The full JID of the XMPP user that created this session by executing
+ * the first step of a command. Only that JID must be allowed to access
+ * this session.
+ */
+ const std::string& owner_jid;
+ /**
+ * The current step we are at. It starts at zero. It is used to index the
+ * associated AdhocCommand::callbacks vector.
+ */
+ size_t current_step;
+ bool terminated;
+
+ AdhocSession(const AdhocSession&) = delete;
+ AdhocSession(AdhocSession&&) = delete;
+ AdhocSession& operator=(const AdhocSession&) = delete;
+ AdhocSession& operator=(AdhocSession&&) = delete;
+};
+
+#endif // ADHOC_SESSION_HPP