diff --git a/src/client/component/network.cpp b/src/client/component/network.cpp index 46a49656..45214d40 100644 --- a/src/client/component/network.cpp +++ b/src/client/component/network.cpp @@ -1,4 +1,5 @@ #include +#include "network.hpp" #include "loader/component_loader.hpp" #include "scheduler.hpp" @@ -11,9 +12,6 @@ namespace network { namespace { - using data_view = std::basic_string_view; - using callback = std::function; - std::unordered_map& get_callbacks() { static std::unordered_map callbacks{}; @@ -91,11 +89,31 @@ namespace network throw std::runtime_error("Failed to bind socket"); } } + } - void on(const std::string& command, const callback& callback) - { - get_callbacks()[utils::string::to_lower(command)] = callback; - } + void on(const std::string& command, const callback& callback) + { + get_callbacks()[utils::string::to_lower(command)] = callback; + } + + void send(const game::netadr_t& address, const std::string& command, const std::string& data, const char separator) + { + std::string packet = "\xFF\xFF\xFF\xFF"; + packet.append(command); + packet.push_back(separator); + packet.append(data); + + send_data(address, packet); + } + + void send_data(const game::netadr_t& address, const void* data, const size_t size) + { + game::NET_SendPacket(game::NS_CLIENT1, static_cast(size), data, &address); + } + + void send_data(const game::netadr_t& address, const std::string& data) + { + send_data(address, data.data(), data.size()); } class component final : public component_interface @@ -135,18 +153,15 @@ namespace network { while (true) { - { - MessageBoxA(0, 0, 0, 0); + MessageBoxA(0, 0, 0, 0); - std::string data = utils::string::va("\xFF\xFF\xFF\xFF" "getservers S1 %i full empty", 1); + game::netadr_t addr{}; + addr.type = game::NA_RAWIP; + addr.port = 20810; + *reinterpret_cast(&addr.ipv4.a) = inet_addr("116.203.183.23"); + addr.localNetID = game::NS_CLIENT1; - game::netadr_t addr{}; - addr.type = game::NA_RAWIP; - addr.port = 20810; - *reinterpret_cast(&addr.ipv4.a) = inet_addr("116.203.183.23"); - addr.localNetID = game::NS_CLIENT1; - game::NET_SendPacket(game::NS_CLIENT1, static_cast(data.size()), data.data(), &addr); - } + send(addr, "getservers", utils::string::va("T7 %i full empty", 1)); } }).detach();*/ } diff --git a/src/client/component/network.hpp b/src/client/component/network.hpp new file mode 100644 index 00000000..dfbd3971 --- /dev/null +++ b/src/client/component/network.hpp @@ -0,0 +1,15 @@ +#pragma once +#include "game/game.hpp" + +namespace network +{ + using data_view = std::basic_string_view; + using callback = std::function; + + void on(const std::string& command, const callback& callback); + void send(const game::netadr_t& address, const std::string& command, const std::string& data = {}, + char separator = ' '); + + void send_data(const game::netadr_t& address, const void* data, size_t length); + void send_data(const game::netadr_t& address, const std::string& data); +} diff --git a/src/client/game/symbols.hpp b/src/client/game/symbols.hpp index aaf955a4..27f91a78 100644 --- a/src/client/game/symbols.hpp +++ b/src/client/game/symbols.hpp @@ -23,7 +23,7 @@ namespace game WEAK symbol Live_GetConnectivityInformation{0x141E0C410_g}; // NET - WEAK symbol NET_SendPacket{0x142332F70_g}; + WEAK symbol NET_SendPacket{0x142332F70_g}; // Sys WEAK symbol Sys_ShowConsole{0x142333F80_g}; WEAK symbol Sys_GetTLS{0x142184210_g};