同步操作将从 呵大官人/fooking 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include <stdio.h>#include <stdlib.h>#include <iostream>#include "Script.h"#include "Log.h"#include "Buffer.h"#include "Worker.h"NS_USING;static int luaBufferSize(lua_State *pState){if(!lua_isuserdata(pState, -1)){return luaL_error(pState, "invalid argument:1");}Buffer *pBuffer = (Buffer*)lua_touserdata(pState, -1);if(!pBuffer){return luaL_error(pState, "invalid buffer");}lua_pop(pState, 1);lua_pushinteger(pState, pBuffer->size());return 1;}static int luaBufferData(lua_State *pState){if(!lua_isuserdata(pState, -1)){lua_pushstring(pState, "invalid argument:1");lua_error(pState);return 1;}Buffer *pBuffer = (Buffer*)lua_touserdata(pState, -1);if(!pBuffer){lua_pushstring(pState, "invalid buffer");lua_error(pState);return 1;}lua_pop(pState, 1);lua_pushlstring(pState, pBuffer->data(), pBuffer->size());return 1;}static int luaBufferAppend(lua_State *pState){if(!lua_isuserdata(pState, -2)){return luaL_error(pState, "invalid argument:1");}if(!lua_isstring(pState, -1)){return luaL_error(pState, "invalid argument:2");}Buffer *pBuffer = (Buffer*)lua_touserdata(pState, -2);if(!pBuffer){return luaL_error(pState, "invalid buffer");}size_t len = 0;const char *s = lua_tolstring(pState, -1, &len);if(s && len){pBuffer->append(s, len);}lua_pop(pState, 2);return 0;}static int luaBufferSeek(lua_State *pState){if(!lua_isuserdata(pState, -2)){return luaL_error(pState, "invalid argument:1");}if(!lua_isnumber(pState, -1)){return luaL_error(pState, "invalid argument:2");}Buffer *pBuffer = (Buffer*)lua_touserdata(pState, -2);if(!pBuffer){return luaL_error(pState, "invalid buffer");}int n = lua_tointeger(pState, -1);if(n <= 0){return luaL_error(pState, "invalid number");}pBuffer->seek(n);lua_pop(pState, 2);return 0;}static int luaConnGetBuffer(lua_State *pState){if(!lua_isuserdata(pState, -1)){return luaL_error(pState, "invalid argument:1");}Connection *pConn = (Connection*)lua_touserdata(pState, -1);if(!pConn){return luaL_error(pState, "invalid connection");}lua_pop(pState, 1);Buffer *pBuffer = pConn->getBuffer();lua_pushlightuserdata(pState, pBuffer);return 1;}static int luaConnSend(lua_State *pState){if(!lua_isuserdata(pState, -2)){return luaL_error(pState, "invalid argument:1");}if(!lua_isstring(pState, -1)){return luaL_error(pState, "invalid argument:2");}Connection *pConn = (Connection*)lua_touserdata(pState, -2);if(!pConn){return luaL_error(pState, "invalid connection");}size_t len = 0;const char *s = lua_tolstring(pState, -1, &len);if(s && len){pConn->send(s, len);}lua_pop(pState, 2);return 0;}static int luaConnSessionId(lua_State *pState){Connection *pConn = (Connection*)lua_touserdata(pState, -1);if(!pConn){return luaL_error(pState, "invalid connection");}lua_pop(pState, 1);ClientData *pData = (ClientData*)pConn->getData();if(pData){lua_pushlstring(pState, pData->session.getId(), SID_LENGTH);}return 1;}static int luaopen_buffer(lua_State* l){const luaL_Reg func[] = {{"data", luaBufferData},{"size", luaBufferSize},{"append", luaBufferAppend},{"seek", luaBufferSeek},{NULL, NULL}};luaL_newlib(l, func);return 1;}static int luaopen_connection(lua_State* l){const luaL_Reg func[] = {{"buffer", luaConnGetBuffer},{"send", luaConnSend},{"id", luaConnSessionId},{NULL, NULL}};luaL_newlib(l, func);return 1;}Script::Script():pState(NULL),bhConnect(false),bhRead(false),bhWrite(false),bhClose(false){}Script::~Script(){if(pState){lua_close(pState);}}bool Script::load(std::string &filename){pState = luaL_newstate();luaL_openlibs(pState);//reg libraryluaL_requiref(pState, "fooking.buffer", luaopen_buffer, 0);luaL_requiref(pState, "fooking.connection", luaopen_connection, 0);//dofileif(luaL_dofile(pState, filename.c_str())){printf("parse config file error=%s\n", lua_tostring(pState, -1));return false;}//check read handlerlua_getglobal(pState, "onRead");if(lua_isfunction(pState, -1)){bhRead = true;}//check write handlerlua_getglobal(pState, "onWrite");if(lua_isfunction(pState, -1)){bhWrite = true;}//check connect handlerlua_getglobal(pState, "onConnect");if(lua_isfunction(pState, -1)){bhConnect = true;}//check close handlerlua_getglobal(pState, "onClose");if(lua_isfunction(pState, -1)){bhClose = true;}//clear stacklua_pop(pState, 4);return true;}int Script::procRead(Connection *conn, int requestid, Buffer *input, Buffer *output){if(!bhRead){return 0;}LOG("call lua func onRead start");lua_getglobal(pState, "onRead");lua_pushlightuserdata(pState, conn);lua_pushinteger(pState, requestid);lua_pushlightuserdata(pState, input);lua_pushlightuserdata(pState, output);int ret = lua_pcall(pState, 4, 1, 0);if(ret != 0){LOG_ERR("call lua func onRead error, err=%s", lua_tostring(pState, -1));return 0;//不能返回-1,如果lua调用错误,可能导致内存急剧增长}int n = lua_tointeger(pState, -1);LOG("call lua func onRead, ret=%d", n);lua_pop(pState, 1);return n;}int Script::procWrite(Connection *conn, int requestid, Buffer *input, Buffer *output){if(!bhWrite){return 0;}LOG("call lua func onWrite start");lua_getglobal(pState, "onWrite");lua_pushlightuserdata(pState, conn);lua_pushinteger(pState, requestid);lua_pushlightuserdata(pState, input);lua_pushlightuserdata(pState, output);int ret = lua_pcall(pState, 4, 1, 0);if(ret != 0){LOG_ERR("call lua func onWrite error, err=%s", lua_tostring(pState, -1));return 0;//同上}int n = lua_tointeger(pState, -1);LOG("call lua func onWrite, ret=%d", n);lua_pop(pState, 1);return n;}int Script::procConnect(Connection *conn){if(!bhConnect){return 0;}lua_getglobal(pState, "onConnect");lua_pushlightuserdata(pState, conn);int ret = lua_pcall(pState, 1, 0, 0);if(ret != 0){LOG_ERR("call lua func onConnect error, err=%s", lua_tostring(pState, -1));return 0;//同上}return 0;}int Script::procClose(Connection *conn){if(!bhClose){return 0;}lua_getglobal(pState, "onClose");lua_pushlightuserdata(pState, conn);int ret = lua_pcall(pState, 1, 0, 0);if(ret != 0){LOG_ERR("call lua func onClose error, err=%s", lua_tostring(pState, -1));return 0;//同上}return 0;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。