summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/LuaTask.cc75
1 files changed, 75 insertions, 0 deletions
diff --git a/lib/LuaTask.cc b/lib/LuaTask.cc
new file mode 100644
index 0000000..4608fa1
--- /dev/null
+++ b/lib/LuaTask.cc
@@ -0,0 +1,75 @@
+#include <LuaTask.h>
+#include <LuaHandle.h>
+#ifndef LUATASK_OMIT_HTTPCLIENT
+#include <HttpClient.h>
+#endif
+
+LuaTask * LuaTask::top = 0;
+
+LuaTask::LuaTask(Lua * _L, const String & _cmd) : L(_L), cmd(_cmd), c(0), b(0) {
+ if (top) {
+ WaitFor(top);
+ } else {
+ SetBurst();
+ }
+ top = this;
+}
+
+LuaTask::~LuaTask() {
+ if (top == this) {
+ top = 0;
+ }
+}
+
+String LuaTask::GetName() {
+ return "LuaTask(" + cmd + ")";
+}
+
+int LuaTask::Do() throw (GeneralException) {
+ switch (current) {
+ case 0:
+ current = 1;
+ L->resume(cmd);
+ case 1:
+ if (c) {
+ int nargs = 0;
+
+ if (task == "HttpClient") {
+ LuaBuffer o(b);
+ o.pushdestruct(L);
+ nargs = 1;
+ }
+
+ delete c;
+ c = 0;
+
+ L->resume(nargs);
+ }
+ if (L->gettop() >= 1) {
+ task = L->tostring(1);
+ if (task == "") {
+ L->error("Must precise a task-type to execute.");
+ return TASK_DONE;
+#ifndef LUATASK_OMIT_HTTPCLIENT
+ } else if (task == "HttpClient") {
+ String url = L->tostring(2);
+ t_headers headers;
+
+ b = new Buffer(true);
+
+ headers.push_back("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0");
+ c = new HttpClient(url, b, "", headers);
+ WaitFor(c);
+ Suspend(TASK_ON_HOLD);
+#endif
+ } else {
+ L->error("Unknow requested task: " + task);
+ return TASK_DONE;
+ }
+ } else {
+ return TASK_DONE;
+ }
+ }
+
+ return TASK_ON_HOLD;
+}