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; +} | 
