From 89f564f09d646ff905265747f5c060b9a17efb64 Mon Sep 17 00:00:00 2001 From: Tixx <83774803+WiserTixx@users.noreply.github.com> Date: Tue, 18 Aug 2026 02:28:03 +0200 Subject: [PATCH] Add parallel udp initialization --- src/Network/VehicleData.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/Network/VehicleData.cpp b/src/Network/VehicleData.cpp index 6cb1a33..709cf77 100644 --- a/src/Network/VehicleData.cpp +++ b/src/Network/VehicleData.cpp @@ -22,12 +22,17 @@ #include "Logger.h" #include +#include +#include #include SOCKET UDPSock = -1; sockaddr_in* ToServer = nullptr; +std::mutex UDPSendMutex; + void UDPSend(std::string Data) { + std::scoped_lock lock(UDPSendMutex); if (ClientID == -1 || UDPSock == -1) return; if (Data.length() > 400) { @@ -79,6 +84,7 @@ void UDPRcv() { Ret[Rcv] = 0; UDPParser(std::string_view(Ret.data(), Rcv)); } + void UDPClientMain(const std::string& IP, int Port) { #ifdef _WIN32 WSADATA data; @@ -94,11 +100,15 @@ void UDPClientMain(const std::string& IP, int Port) { ToServer->sin_port = htons(Port); inet_pton(AF_INET, IP.c_str(), &ToServer->sin_addr); UDPSock = socket(AF_INET, SOCK_DGRAM, 0); + std::future magicSend; + if (!magic.empty()) { - for (int i = 0; i < 10; i++) { - std::this_thread::sleep_for(std::chrono::milliseconds(10)); - UDPSend(magic); - } + magicSend = std::async(std::launch::async, ([](){ + for (int i = 0; i < 10; i++) { + UDPSend(magic); + std::this_thread::sleep_for(std::chrono::milliseconds(50)); + } + })); } GameSend("P" + std::to_string(ClientID)); TCPSend("H", TCPSock); @@ -108,6 +118,11 @@ void UDPClientMain(const std::string& IP, int Port) { UDPRcv(); } debug("UDP receive loop done"); + + if (magicSend.valid()) { + magicSend.get(); + } + KillSocket(UDPSock); WSACleanup(); }