static int ts_lua_sleep(lua_State * L) { int sec; ts_lua_http_intercept_ctx *ictx; ictx = ts_lua_get_http_intercept_ctx(L); sec = luaL_checknumber(L, 1); TSContSchedule(ictx->contp, sec * 1000, TS_THREAD_POOL_DEFAULT); return lua_yield(L, 0); }
static int ts_lua_flush(lua_State * L) { int64_t avail; ts_lua_http_intercept_ctx *ictx; ictx = ts_lua_get_http_intercept_ctx(L); avail = TSIOBufferReaderAvail(ictx->output.reader); if (avail > 0) { ictx->to_flush = TSVIONDoneGet(ictx->output.vio) + TSIOBufferReaderAvail(ictx->output.reader); TSVIOReenable(ictx->output.vio); return lua_yield(L, 0); } return 0; }
static int ts_lua_say(lua_State * L) { const char *data; size_t len; ts_lua_http_intercept_ctx *ictx; ictx = ts_lua_get_http_intercept_ctx(L); data = luaL_checklstring(L, 1, &len); if (len > 0) { TSIOBufferWrite(ictx->output.buffer, data, len); TSVIOReenable(ictx->output.vio); } return 0; }
static int ts_lua_sleep(lua_State * L) { int sec; TSAction action; TSCont contp; ts_lua_http_intercept_item *node; ts_lua_http_intercept_ctx *ictx; ictx = ts_lua_get_http_intercept_ctx(L); sec = luaL_checknumber(L, 1); contp = TSContCreate(ts_lua_sleep_handler, TSContMutexGet(ictx->contp)); action = TSContSchedule(contp, sec * 1000, TS_THREAD_POOL_DEFAULT); node = (ts_lua_http_intercept_item *) TSmalloc(sizeof(ts_lua_http_intercept_item)); TS_LUA_ADD_INTERCEPT_ITEM(ictx, node, contp, ts_lua_sleep_cleanup, action); TSContDataSet(contp, node); return lua_yield(L, 0); }