summaryrefslogtreecommitdiff
path: root/project2/basics/tasks
diff options
context:
space:
mode:
Diffstat (limited to 'project2/basics/tasks')
-rw-r--r--project2/basics/tasks/session/sessionClearTask.cpp26
-rw-r--r--project2/basics/tasks/session/sessionClearTask.h25
-rw-r--r--project2/basics/tasks/session/sessionSetTask.cpp27
-rw-r--r--project2/basics/tasks/session/sessionSetTask.h27
-rw-r--r--project2/basics/tasks/structExceptHandling.cpp44
-rw-r--r--project2/basics/tasks/structExceptHandling.h18
6 files changed, 167 insertions, 0 deletions
diff --git a/project2/basics/tasks/session/sessionClearTask.cpp b/project2/basics/tasks/session/sessionClearTask.cpp
new file mode 100644
index 0000000..265bb1c
--- /dev/null
+++ b/project2/basics/tasks/session/sessionClearTask.cpp
@@ -0,0 +1,26 @@
+#include <pch.hpp>
+#include <boost/foreach.hpp>
+#include "scriptLoader.h"
+#include "sessionClearTask.h"
+#include "session.h"
+#include "execContext.h"
+
+DECLARE_LOADER("sessionclear", SessionClearTask);
+
+SessionClearTask::SessionClearTask(ScriptNodePtr p) :
+ SourceObject(p),
+ Task(p),
+ key(p->value("key", NULL).as<Glib::ustring>())
+{
+}
+
+SessionClearTask::~SessionClearTask()
+{
+}
+
+void
+SessionClearTask::execute(ExecContext * ec) const
+{
+ ec->getSession()->ClearValue(key);
+}
+
diff --git a/project2/basics/tasks/session/sessionClearTask.h b/project2/basics/tasks/session/sessionClearTask.h
new file mode 100644
index 0000000..ead88bf
--- /dev/null
+++ b/project2/basics/tasks/session/sessionClearTask.h
@@ -0,0 +1,25 @@
+#ifndef SESSIONCLEARTASK_H
+#define SESSIONCLEARTASK_H
+
+#include <boost/intrusive_ptr.hpp>
+#include <map>
+#include "sourceObject.h"
+#include "scriptLoader.h"
+#include "task.h"
+
+class CommonObjects;
+
+/// Project2 component to remove a variable from the session
+class SessionClearTask : public Task {
+ public:
+ SessionClearTask(ScriptNodePtr p);
+ virtual ~SessionClearTask();
+
+ void execute(ExecContext *) const;
+
+ const Glib::ustring key;
+};
+
+#endif
+
+
diff --git a/project2/basics/tasks/session/sessionSetTask.cpp b/project2/basics/tasks/session/sessionSetTask.cpp
new file mode 100644
index 0000000..f46571b
--- /dev/null
+++ b/project2/basics/tasks/session/sessionSetTask.cpp
@@ -0,0 +1,27 @@
+#include <pch.hpp>
+#include <boost/foreach.hpp>
+#include "scriptLoader.h"
+#include "sessionSetTask.h"
+#include "session.h"
+#include "execContext.h"
+
+DECLARE_LOADER("sessionset", SessionSetTask);
+
+SessionSetTask::SessionSetTask(ScriptNodePtr p) :
+ SourceObject(p),
+ Task(p),
+ key(p->value("key", NULL).as<Glib::ustring>()),
+ value(p, "value")
+{
+}
+
+SessionSetTask::~SessionSetTask()
+{
+}
+
+void
+SessionSetTask::execute(ExecContext * ec) const
+{
+ ec->getSession()->SetValue(key, value(ec));
+}
+
diff --git a/project2/basics/tasks/session/sessionSetTask.h b/project2/basics/tasks/session/sessionSetTask.h
new file mode 100644
index 0000000..d38c216
--- /dev/null
+++ b/project2/basics/tasks/session/sessionSetTask.h
@@ -0,0 +1,27 @@
+#ifndef SESSIONSETTASK_H
+#define SESSIONSETTASK_H
+
+#include <boost/intrusive_ptr.hpp>
+#include <map>
+#include "sourceObject.h"
+#include "scriptLoader.h"
+#include "task.h"
+#include "variables.h"
+
+class CommonObjects;
+
+/// Project2 component to add/update a variable in the session
+class SessionSetTask : public Task {
+ public:
+ SessionSetTask(ScriptNodePtr p);
+ virtual ~SessionSetTask();
+
+ void execute(ExecContext *) const;
+
+ const Glib::ustring key;
+ const Variable value;
+};
+
+#endif
+
+
diff --git a/project2/basics/tasks/structExceptHandling.cpp b/project2/basics/tasks/structExceptHandling.cpp
new file mode 100644
index 0000000..917f030
--- /dev/null
+++ b/project2/basics/tasks/structExceptHandling.cpp
@@ -0,0 +1,44 @@
+#include <pch.hpp>
+#include "structExceptHandling.h"
+#include "scriptLoader.h"
+#include "scriptStorage.h"
+#include "scripts.h"
+#include <boost/foreach.hpp>
+
+DECLARE_LOADER("handler", StructuredExceptionHandler);
+
+StructuredExceptionHandler::StructuredExceptionHandler(ScriptNodePtr e) :
+ SourceObject(e),
+ IHaveSubTasks(e)
+{
+ e->script->loader.addLoadTargetSub(e, "try", true, Storer::into<ElementLoader>(&normal));
+ e->script->loader.addLoadTargetSub(e, "catch", false, Storer::into<ElementLoader>(&catches));
+ e->script->loader.addLoadTargetSub(e, "finally", false, Storer::into<ElementLoader>(&finallies));
+}
+
+void
+StructuredExceptionHandler::loadComplete(const CommonObjects * co)
+{
+ IHaveSubTasks::loadComplete(co);
+}
+
+void
+StructuredExceptionHandler::execute(ExecContext * ec) const
+{
+ try {
+ run(normal, ec);
+ }
+ catch (...) {
+ try {
+ run(catches, ec);
+ run(finallies, ec);
+ return;
+ }
+ catch (...) {
+ }
+ run(finallies, ec);
+ throw;
+ }
+ run(finallies, ec);
+}
+
diff --git a/project2/basics/tasks/structExceptHandling.h b/project2/basics/tasks/structExceptHandling.h
new file mode 100644
index 0000000..b6702f1
--- /dev/null
+++ b/project2/basics/tasks/structExceptHandling.h
@@ -0,0 +1,18 @@
+#ifndef STRUCTUREDEXCEPTIONHANDLER_H
+#define STRUCTUREDEXCEPTIONHANDLER_H
+
+#include "iHaveSubTasks.h"
+
+class StructuredExceptionHandler : public IHaveSubTasks {
+ public:
+ StructuredExceptionHandler(ScriptNodePtr);
+
+ void loadComplete(const CommonObjects*);
+ void execute(ExecContext * ec) const;
+
+ private:
+ Tasks catches, finallies;
+};
+
+#endif
+