diff --git a/.anjuta/session/anjuta.session b/.anjuta/session/anjuta.session index 2e9c025..bcfe6ce 100644 --- a/.anjuta/session/anjuta.session +++ b/.anjuta/session/anjuta.session @@ -1,5 +1,9 @@ [Anjuta] -Geometry=976x744+10+10 +Maximized=1 +Geometry=1280x979+0+0 + +[File Loader] +Files=../../src/main.c#51%%%../../src/bootstrap/main.cpp#84%%%../../src/bootstrap/serv.cpp#39%%%../../src/bootstrap/serv.h#16%%%../../src/bootstrap/opcodes.h#1%%%../../src/bootstrap/events.h#6%%%../../src/async_serv.c#1%%%../../src/async_serv.h#8 [Document Manager] bookmarks=\n\n @@ -9,7 +13,10 @@ Run in terminal=2 Working directories=../../. [Project Manager] -Shortcut=bacteria//libbacteria//libbacteria.a%%%bacteria//src//bootstrap//bbootstrap-server%%%bacteria//src//client//bacteria-client%%%bacteria//src//bacteria +Expand=bacteria + +[Debugger] +Stop at beginning=2 [Build] Configuration list=1:Default:%%%1:Debug:Debug%%%1:Profiling:Profiling%%%1:Optimized:Optimized @@ -18,6 +25,3 @@ BuildArgs/Default=--enable-maintainer-mode BuildArgs/Debug=--enable-maintainer-mode 'CFLAGS=-g -O0' 'CXXFLAGS=-g -O0' 'JFLAGS=-g -O0' 'FFLAGS=-g -O0' BuildArgs/Profiling=--enable-maintainer-mode 'CFLAGS=-g -pg' 'CXXFLAGS=-g -pg' 'JFLAGS=-g -pg' 'FFLAGS=-g -pg' BuildArgs/Optimized=--enable-maintainer-mode 'CFLAGS=-O2' 'CXXFLAGS=-O2' 'JFLAGS=-O2' 'FFLAGS=-O2' - -[Debugger] -Stop at beginning=2 diff --git a/.anjuta/session/dock-layout.xml b/.anjuta/session/dock-layout.xml index d1b5d21..680f0d0 100644 --- a/.anjuta/session/dock-layout.xml +++ b/.anjuta/session/dock-layout.xml @@ -1,4 +1,4 @@ - + diff --git a/.anjuta_sym_db.db b/.anjuta_sym_db.db index 4913e9c..1f63ad2 100644 Binary files a/.anjuta_sym_db.db and b/.anjuta_sym_db.db differ diff --git a/src/bootstrap/events.h b/src/bootstrap/events.h index 98c7c6a..9cb69d0 100644 --- a/src/bootstrap/events.h +++ b/src/bootstrap/events.h @@ -6,11 +6,9 @@ namespace events{ //is idea to disable lua for opcodes as wrapper if is need. -#ifndef DISABLELUA - using fun = void(*)(lua_State * L, ...); -#else - using fun = void(*)(const char params[], ...); -#endif +#define EVENTDEF lua_State * L, int sock, const char * uIp, uint16_t uPort, char* buf + using fun = void(*)(EVENTDEF, ...); + class event{ protected: fun m_fun; @@ -18,11 +16,10 @@ namespace events{ event(fun f): m_fun(f) {} template -#ifndef DISABLELUA - void run(lua_State * L,const char params[], args ... values){ m_fun(L,params, values...); }; -#else - void run(const char params[], args ... values){ m_fun(params, values...); }; -#endif +void run(EVENTDEF, args ... values){ + m_fun(L, sock, (const char*)uIp, uPort, buf, values...); +}; + }; }; diff --git a/src/bootstrap/luasubmodules/init.lua b/src/bootstrap/luasubmodules/init.lua index a96be04..67dc91d 100644 --- a/src/bootstrap/luasubmodules/init.lua +++ b/src/bootstrap/luasubmodules/init.lua @@ -1 +1,6 @@ print("bootstrap server inited") +--int sock, const char * uIp, uint16_t uPort, char* buf +function event1(sock, ip, port, buf) + print("Message: ", buf, " from ", ip, " on port: ", port) + return "Hewwo?" +end diff --git a/src/bootstrap/main.cpp b/src/bootstrap/main.cpp index 4942377..6f3162f 100644 --- a/src/bootstrap/main.cpp +++ b/src/bootstrap/main.cpp @@ -1,4 +1,4 @@ -#include"opcodes.h" + #include #include @@ -84,18 +84,5 @@ servArgs luasarg = {(char*)luahost.c_str(),luaport,L}; serv.join(); lua_close(L); #endif - opcode::opcode_data data1 = {0x01, opcode::ignorebyte, opcode::ignorebyte, - 0x01}; - - opcode::opcode op{{0x01, opcode::ignorebyte, opcode::ignorebyte, 0x01}, - opcode::event0}; - opcode::opcode op1{{0x02, opcode::ignorebyte, opcode::ignorebyte, 0x01}, - NULL}; - opcode::opcode op2{{0x01, opcode::ignorebyte, opcode::ignorebyte, 0x01}, - NULL}; - std::cout << (op == op2) << std::endl; - std::cout << (op == data1) << std::endl; - op.getEvent().run(NULL, "", NULL); - return 0; } diff --git a/src/bootstrap/opcodes.cpp b/src/bootstrap/opcodes.cpp index 820277c..12549f9 100644 --- a/src/bootstrap/opcodes.cpp +++ b/src/bootstrap/opcodes.cpp @@ -1,11 +1,47 @@ // extern void event1(const char params[],...); -#include "lua.h" +#include #include +#include"opcodes.h" + +extern "C" { + #include + #include + #include + #include"lua/luaserv.h" +}; namespace opcode { -void event1(lua_State *L, ...) { puts("event1 -"); } +void event1(lua_State * L, int sock, const char * uIp, uint16_t uPort, char* buf, ...) { + puts("event1 -"); // + lua_getglobal(L, "event1"); + lua_pushnumber(L, sock); + lua_pushstring(L, uIp); + lua_pushnumber(L, uPort); + lua_pushstring(L, (buf+4)); -void event0(lua_State *L, ...) { puts("event0 - "); } + if (lua_pcall(L, /*args*/ 4, /*results*/ 1, 0) != 0) + luaL_error(L, "error running function `event1': %s", + lua_tostring(L, -1)); + unsigned char retdata[512]; + if (!lua_isnumber(L, -1)) { + printf("(check retval[lua]) Ret val: %s\n", lua_tostring(L, -1)); + sprintf((char*)retdata,"%s", lua_tostring(L,-1)); + } else{ + sprintf((char*)retdata,"%d", lua_tonumber(L,-1)); + printf("(check retval[lua]) Ret val (num): %d\n", (int)lua_tonumber(L, -1)); + } + lua_pop(L, 1); + + if (send(sock, retdata, strlen((char*)retdata), MSG_NOSIGNAL) < 0) { + perror("Write error"); + } + + +} + +void event0(lua_State * L, int sock, const char * uIp, uint16_t uPort, char* buf, ...) { + puts("event0 - "); +} } // namespace opcode diff --git a/src/bootstrap/opcodes.h b/src/bootstrap/opcodes.h index 9e65c4a..1430add 100644 --- a/src/bootstrap/opcodes.h +++ b/src/bootstrap/opcodes.h @@ -51,7 +51,7 @@ class opcode{ namespace opcode{ - void event1(lua_State * L, ...); - void event0(lua_State * L, ...); + void event1(lua_State * L, int sock, const char * uIp, uint16_t uPort, char* buf, ...); + void event0(lua_State * L, int sock, const char * uIp, uint16_t uPort, char* buf, ...); }; #endif diff --git a/src/bootstrap/serv.cpp b/src/bootstrap/serv.cpp index 445d238..3993b38 100644 --- a/src/bootstrap/serv.cpp +++ b/src/bootstrap/serv.cpp @@ -1,11 +1,18 @@ #include "serv.h" - +#include +#include"opcodes.h" #define doExit(...) \ { \ eprintf(__VA_ARGS__); \ exit(EXIT_FAILURE); \ } - +static opcode::opcode opcodes[] = +{ + {{0x01, opcode::ignorebyte, opcode::ignorebyte, 0x01}, + opcode::event0}, + {{'a', 'b', 'c', 'd'}, + opcode::event1}, +}; constexpr auto serv_status_lua_var = "server_inited"; static bool serv_inited; void serv_thread(const char * host, const uint16_t port, lua_State * L) { @@ -32,7 +39,7 @@ void serv_thread(const char * host, const uint16_t port, lua_State * L) { } if (listen(main_descriptor, MAX_LISTEN) == -1) doExit("Cant start listening\n"); - + printf("(serv) %s:%d listening\n", host, port); lua::pushval(L, true); lua_setglobal(L, serv_status_lua_var); lua_pop(L, 1); @@ -108,17 +115,26 @@ void serv_thread(const char * host, const uint16_t port, lua_State * L) { puts("Stop server?"); return; } - printf("%s:%d -> %s\n",ip,port,buf); - for (int z = sizeof(buf) - 1; z--;) { - // printf("buf[%d] = %c\n", z, buf[z]); - if (buf[z] != 0) - buf[z] ^= rand() % 10; - } - if (send(events[n].data.fd, buf, sizeof(buf), MSG_NOSIGNAL) < 0) { - perror("Write error"); - } + +/* + * + opcode::opcode op1{{0x02, opcode::ignorebyte, opcode::ignorebyte, 0x01}, + NULL}; + opcode::opcode op2{{0x01, opcode::ignorebyte, opcode::ignorebyte, 0x01}, + NULL}; + std::cout << (op == op2) << std::endl; + */ + opcode::opcode_data data = {buf[0], buf[1], buf[2], buf[3]}; + for( auto op : opcodes ){ + if( op == data ){ + puts("Opcode found"); + op.getEvent().run(L, events[n].data.fd, + ip, port, buf); + break; + } + }//for // do_use_fd(events[n].data.fd); - } // else client end - } // for (events) end - } // for ;; end + }//for(?) + } + } }