From feff2e38c0e744376a1f5ed53e7bffad3c6885ce Mon Sep 17 00:00:00 2001 From: Benjamin Sergeant Date: Tue, 28 Apr 2020 19:11:06 -0700 Subject: [PATCH] can send message, set a url and start the connection --- luarocks/LuaWebSocket.h | 89 +++++++++++++++++++++-------------------- luarocks/ia.lua | 34 +++++----------- luarocks/main.cpp | 24 ++++++++++- 3 files changed, 78 insertions(+), 69 deletions(-) diff --git a/luarocks/LuaWebSocket.h b/luarocks/LuaWebSocket.h index 2da43264..258a4d1d 100644 --- a/luarocks/LuaWebSocket.h +++ b/luarocks/LuaWebSocket.h @@ -10,81 +10,82 @@ extern "C" } #include "luawrapper.hpp" -#include "Player.hpp" +#include +#include +#include -Player* Player_new(lua_State* L) +using namespace ix; + +WebSocket* WebSocket_new(lua_State* L) { - const char* name = luaL_checkstring(L, 1); - unsigned int health = luaL_checkinteger(L, 2); - return new Player(name, health); + WebSocket* webSocket = new WebSocket(); + webSocket->setOnMessageCallback([](const WebSocketMessagePtr& msg) { + if (msg->type == ix::WebSocketMessageType::Message) + { + std::cout << msg->str << std::endl; + } + }); + return webSocket; } -int Player_getName(lua_State* L) +int WebSocket_getUrl(lua_State* L) { - Player* player = luaW_check(L, 1); - lua_pushstring(L, player->getName()); + WebSocket* webSocket = luaW_check(L, 1); + lua_pushstring(L, webSocket->getUrl().c_str()); return 1; } -int Player_getHealth(lua_State* L) +int WebSocket_setUrl(lua_State* L) { - Player* player = luaW_check(L, 1); - lua_pushinteger(L, player->getHealth()); - return 1; -} - -int Player_setHealth(lua_State* L) -{ - Player* player = luaW_check(L, 1); - unsigned int health = luaL_checkinteger(L, 2); - player->setHealth(health); + WebSocket* webSocket = luaW_check(L, 1); + const char* url = luaL_checkstring(L, 2); + webSocket->setUrl(url); return 0; } -int Player_heal(lua_State* L) +int WebSocket_start(lua_State* L) { - Player* player = luaW_check(L, 1); - Player* target = luaW_check(L, 2); - player->heal(target); + WebSocket* webSocket = luaW_check(L, 1); + webSocket->start(); return 0; } -int Player_say(lua_State* L) +int WebSocket_send(lua_State* L) { - Player* player = luaW_check(L, 1); - const char* text = luaL_checkstring(L, 2); - player->say(text); + WebSocket* webSocket = luaW_check(L, 1); + const char* msg = luaL_checkstring(L, 2); + webSocket->send(msg); return 0; } -int Player_info(lua_State* L) +int WebSocket_sleep(lua_State* L) { - Player* player = luaW_check(L, 1); - player->info(); + WebSocket* webSocket = luaW_check(L, 1); + int duration = luaL_checkinteger(L, 2); + std::this_thread::sleep_for(std::chrono::milliseconds(duration)); return 0; } -static luaL_Reg Player_table[] = { +static luaL_Reg WebSocket_table[] = { { NULL, NULL } }; -static luaL_Reg Player_metatable[] = { - { "getName", Player_getName }, - { "getHealth", Player_getHealth }, - { "setHealth", Player_setHealth }, - { "heal", Player_heal }, - { "say", Player_say }, - { "info", Player_info }, +static luaL_Reg WebSocket_metatable[] = { + { "getUrl", WebSocket_getUrl }, + { "setUrl", WebSocket_setUrl }, + { "start", WebSocket_start }, + { "send", WebSocket_send }, + { "sleep", WebSocket_sleep }, { NULL, NULL } }; -int luaopen_Player(lua_State* L) +int luaopen_WebSocket(lua_State* L) { - luaW_register(L, - "Player", - Player_table, - Player_metatable, - Player_new + luaW_register(L, + "WebSocket", + WebSocket_table, + WebSocket_metatable, + WebSocket_new ); return 1; } diff --git a/luarocks/ia.lua b/luarocks/ia.lua index d6891c04..1d667047 100644 --- a/luarocks/ia.lua +++ b/luarocks/ia.lua @@ -1,27 +1,13 @@ -info() +webSocket = WebSocket.new() -batman = Player.new("Batman", 100) -robin = Player.new("Robin", 100) +webSocket:setUrl("ws://localhost:8008") +print("Url: " .. webSocket:getUrl()) -robin:say("I'm the team lea...") -batman:say("Shut up!\n") +webSocket:start() -print(batman:getName().." slap "..robin:getName()) -math.randomseed(os.time()) -robin:setHealth(math.random(20, 80)) -robin:info() - -print("\n") - -print(batman:getName().." heal "..robin:getName()) -batman:heal(robin) -robin:info() - --- Robin: I'm the team lea... --- Batman: Shut up! --- --- Batman slap Robin --- Robin have 80 HP --- --- Batman heal Robin --- Robin have 100 HP \ No newline at end of file +while true +do + print("Waiting ...") + webSocket:send("coucou"); + webSocket:sleep(1000) +end diff --git a/luarocks/main.cpp b/luarocks/main.cpp index 3295dcf4..e4a800dc 100644 --- a/luarocks/main.cpp +++ b/luarocks/main.cpp @@ -9,6 +9,7 @@ extern "C" #include "functions.hpp" #include "LuaWebSocket.h" +#include int main() { @@ -19,8 +20,29 @@ int main() lua_register(L, "info", lua_info); // Objets - luaopen_Player(L); + luaopen_WebSocket(L); +#if 0 luaL_dofile(L, "ia.lua"); +#else + int loadStatus = luaL_loadfile(L, "ia.lua"); + if (loadStatus) + { + std::cerr << "Error loading gof_server.lua" << std::endl; + std::cerr << lua_tostring(L, -1) << std::endl; + return 1; + } + else + { + std::cout << "loaded ia.lua" << std::endl; + } + + try { + lua_call(L, 0, 0); + } + catch (const std::runtime_error& ex) { + std::cerr << ex.what() << std::endl; + } +#endif lua_close(L); }