From 847ef230924d5fc0426b46e9d64ccede2a58baff Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 27 Nov 2024 16:14:20 +0300 Subject: [PATCH] add network.__closeserver --- src/logic/scripting/lua/libs/libnetwork.cpp | 9 +++++++++ src/network/Network.cpp | 14 +++++++++----- src/network/Network.hpp | 1 + 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/logic/scripting/lua/libs/libnetwork.cpp b/src/logic/scripting/lua/libs/libnetwork.cpp index 1b3757b1..6a6c5e69 100644 --- a/src/logic/scripting/lua/libs/libnetwork.cpp +++ b/src/logic/scripting/lua/libs/libnetwork.cpp @@ -58,6 +58,14 @@ static int l_close(lua::State* L) { return 0; } +static int l_closeserver(lua::State* L) { + u64id_t id = lua::tointeger(L, 1); + if (auto server = engine->getNetwork().getServer(id)) { + server->close(); + } + return 0; +} + static int l_send(lua::State* L) { u64id_t id = lua::tointeger(L, 1); auto connection = engine->getNetwork().getConnection(id); @@ -127,6 +135,7 @@ const luaL_Reg networklib[] = { {"get", lua::wrap}, {"get_binary", lua::wrap}, {"__open", lua::wrap}, + {"__closeserver", lua::wrap}, {"__connect", lua::wrap}, {"__close", lua::wrap}, {"__send", lua::wrap}, diff --git a/src/network/Network.cpp b/src/network/Network.cpp index fa09dc0e..c6736ada 100644 --- a/src/network/Network.cpp +++ b/src/network/Network.cpp @@ -254,11 +254,7 @@ static std::string to_string(const sockaddr_in* addr) { static std::string to_string(const addrinfo* addr) { if (addr->ai_family == AF_INET) { - auto psai = reinterpret_cast(addr->ai_addr); - char ip[INET_ADDRSTRLEN]; - if (inet_ntop(addr->ai_family, &(psai->sin_addr), ip, INET_ADDRSTRLEN)) { - return std::string(ip)+":"+std::to_string(psai->sin_port); - } + return to_string(reinterpret_cast(addr->ai_addr)); } else if (addr->ai_family == AF_INET6) { auto psai = reinterpret_cast(addr->ai_addr); char ip[INET6_ADDRSTRLEN]; @@ -548,6 +544,14 @@ Connection* Network::getConnection(u64id_t id) const { return found->second.get(); } +TcpServer* Network::getServer(u64id_t id) const { + const auto& found = servers.find(id); + if (found == servers.end()) { + return nullptr; + } + return found->second.get(); +} + u64id_t Network::connect(const std::string& address, int port, consumer callback) { u64id_t id = nextConnection++; auto socket = SocketConnection::connect(address, port, [id, callback]() { diff --git a/src/network/Network.hpp b/src/network/Network.hpp index 741b3ed4..911966db 100644 --- a/src/network/Network.hpp +++ b/src/network/Network.hpp @@ -75,6 +75,7 @@ namespace network { ); [[nodiscard]] Connection* getConnection(u64id_t id) const; + [[nodiscard]] TcpServer* getServer(u64id_t id) const; u64id_t connect(const std::string& address, int port, consumer callback);