diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/LuaTask.cc | 75 |
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; +} |