#include #include #ifndef LUATASK_OMIT_HTTPCLIENT #include #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; }