diff --git a/TODO b/TODO index d91ec20..d22f382 100644 --- a/TODO +++ b/TODO @@ -1,2 +1,3 @@ initialization code for other operating systems - currently VoidNet only supports windows -initialization code for tcp client for other operating systems - " \ No newline at end of file +initialization code for tcp client for other operating systems - " +implement thread pool - god dammit so many tries and it doesnt work \ No newline at end of file diff --git a/TestsVS/Tests/Release/Tests.tlog/CL.command.1.tlog b/TestsVS/Tests/Release/Tests.tlog/CL.command.1.tlog index 46b134b..2d0bd35 100644 Binary files a/TestsVS/Tests/Release/Tests.tlog/CL.command.1.tlog and b/TestsVS/Tests/Release/Tests.tlog/CL.command.1.tlog differ diff --git a/TestsVS/Tests/Release/Tests.tlog/CL.read.1.tlog b/TestsVS/Tests/Release/Tests.tlog/CL.read.1.tlog new file mode 100644 index 0000000..e3d9241 Binary files /dev/null and b/TestsVS/Tests/Release/Tests.tlog/CL.read.1.tlog differ diff --git a/TestsVS/Tests/Release/Tests.tlog/CL.write.1.tlog b/TestsVS/Tests/Release/Tests.tlog/CL.write.1.tlog new file mode 100644 index 0000000..e85ba54 Binary files /dev/null and b/TestsVS/Tests/Release/Tests.tlog/CL.write.1.tlog differ diff --git a/TestsVS/Tests/Release/Tests.tlog/link.command.1.tlog b/TestsVS/Tests/Release/Tests.tlog/link.command.1.tlog index 7d676d7..46b134b 100644 Binary files a/TestsVS/Tests/Release/Tests.tlog/link.command.1.tlog and b/TestsVS/Tests/Release/Tests.tlog/link.command.1.tlog differ diff --git a/TestsVS/Tests/Release/Tests.tlog/link.read.1.tlog b/TestsVS/Tests/Release/Tests.tlog/link.read.1.tlog index aa32f17..46b134b 100644 Binary files a/TestsVS/Tests/Release/Tests.tlog/link.read.1.tlog and b/TestsVS/Tests/Release/Tests.tlog/link.read.1.tlog differ diff --git a/TestsVS/Tests/Release/Tests.tlog/link.write.1.tlog b/TestsVS/Tests/Release/Tests.tlog/link.write.1.tlog index 33fb381..46b134b 100644 Binary files a/TestsVS/Tests/Release/Tests.tlog/link.write.1.tlog and b/TestsVS/Tests/Release/Tests.tlog/link.write.1.tlog differ diff --git a/TestsVS/Tests/Tests.vcxproj b/TestsVS/Tests/Tests.vcxproj index d7e1ff8..95630e1 100644 --- a/TestsVS/Tests/Tests.vcxproj +++ b/TestsVS/Tests/Tests.vcxproj @@ -117,6 +117,7 @@ true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) F:\VoidNet\include; + MultiThreaded Console diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog index f06a63f..da2a240 100644 Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog differ diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog index 72e3d43..02d72cf 100644 Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog differ diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog index bfd30b5..99fa2d0 100644 Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog differ diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib-link.write.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib-link.write.1.tlog index bd81a63..a56c9d6 100644 Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib-link.write.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib-link.write.1.tlog differ diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib.read.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib.read.1.tlog index d1d9bcb..713dfb9 100644 Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib.read.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib.read.1.tlog differ diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/lib.command.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/lib.command.1.tlog index 3e3d46b..46e8865 100644 Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/lib.command.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/lib.command.1.tlog differ diff --git a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj index 788028c..4fd9b6b 100644 --- a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj +++ b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj @@ -27,7 +27,6 @@ - @@ -42,7 +41,6 @@ - diff --git a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters index 11506fe..06e1184 100644 --- a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters +++ b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters @@ -45,9 +45,6 @@ include - - include - @@ -80,9 +77,6 @@ src - - src - diff --git a/include/TcpClient.hpp b/include/TcpClient.hpp index 1d890a8..2c17a3f 100644 --- a/include/TcpClient.hpp +++ b/include/TcpClient.hpp @@ -3,9 +3,9 @@ #include "Defs.hpp" #include "NetworkMessage.hpp" -#include "ThreadPool.hpp" #include +#include #ifdef _MSC_VER #pragma once @@ -30,17 +30,20 @@ public: NetworkBuffer ReceiveDataArray(); const NetworkMessage &ReceiveData(); + void StartSender(); VoidCode SendMessage(const NetworkMessage &message); private: - static VoidCode SendNetworkMessage(const NetworkMessage &message, TcpClient *client); + void SendNetworkMessage(const NetworkMessage &message); + void SendNetworkMessageNow(const NetworkMessage &message); VoidCode Initialize(const std::string &ip, uint16 port = default_port); std::string ip; uint16 port = 0; - bool initialized; + bool initialized = false; + bool run_sender = false; - ThreadPool thread_pool; + std::vector network_message_queue; #ifdef _MSC_VER SOCKET tcp_socket = INVALID_SOCKET; diff --git a/include/ThreadPool.hpp b/include/ThreadPool.hpp deleted file mode 100644 index 6cfc0be..0000000 --- a/include/ThreadPool.hpp +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef THREAD_POOL_HPP -#define THREAD_POOL_HPP - -#ifdef _MSC_VER -#pragma once -#endif - -#include -#include -#include -#include -#include - -class ThreadPool -{ -public: - ThreadPool(int threads); - ~ThreadPool(); - void Enqueue(std::function f); - void Shutdown(); - const ThreadPool &operator=(ThreadPool &pool); - -private: - std::vector threadPool; - std::queue> tasks; - std::mutex tasksMutex; - std::condition_variable condition; - bool terminate; - bool stopped; - void Invoke(); -}; - -#endif \ No newline at end of file diff --git a/include/VoidNetClient.hpp b/include/VoidNetClient.hpp index c425648..ae27026 100644 --- a/include/VoidNetClient.hpp +++ b/include/VoidNetClient.hpp @@ -11,7 +11,6 @@ #include "Callbacks.hpp" #include "NetworkBuffer.hpp" #include "NetworkMessage.hpp" -#include "ThreadPool.hpp" #include #include diff --git a/src/TcpClientWindows.cpp b/src/TcpClientWindows.cpp index eb367da..d003232 100644 --- a/src/TcpClientWindows.cpp +++ b/src/TcpClientWindows.cpp @@ -6,6 +6,7 @@ #include "Tags.hpp" #include +#include #undef SendMessage @@ -45,12 +46,12 @@ VoidCode TcpClient::Initialize(const std::string &ip, uint16 port) return VOID_SUCCESS; } -TcpClient::TcpClient() : port(default_port), thread_pool(50) +TcpClient::TcpClient() : port(default_port) { } TcpClient::TcpClient(const std::string &ip, uint16 port) : - ip(ip), port(port), thread_pool(50) + ip(ip), port(port) { } @@ -134,16 +135,26 @@ const NetworkMessage &TcpClient::ReceiveData() return message; } -VoidCode TcpClient::SendNetworkMessage(const NetworkMessage &message, TcpClient *client) +void TcpClient::SendNetworkMessage(const NetworkMessage &message) +{ + network_message_queue.emplace_back(message); +} + +void TcpClient::SendNetworkMessageNow(const NetworkMessage &message) { NetworkBuffer buffer = message.EncodeMessage(message); - int32 sent_bytes = send(client->tcp_socket, reinterpret_cast(buffer.body), buffer.body_size, 0); + int32 sent_bytes = send(tcp_socket, reinterpret_cast(buffer.body), buffer.body_size, 0); + if (sent_bytes != buffer.body_size) + { + + } } VoidCode TcpClient::SendMessage(const NetworkMessage &message) { - thread_pool.Enqueue([]() - { - //SendNetworkMessage(message, this); - }); +} + +void TcpClient::StartSender() +{ + //std::thread thread = std::thread(&SendNetworkMessageNow, message); } \ No newline at end of file diff --git a/src/ThreadPool.cpp b/src/ThreadPool.cpp deleted file mode 100644 index 3d59a85..0000000 --- a/src/ThreadPool.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include "ThreadPool.hpp" - -ThreadPool::ThreadPool(int threads) : - terminate(false), - stopped(false) -{ - for (int i = 0; i < threads; i++) - threadPool.emplace_back(std::thread(&ThreadPool::Invoke, this)); -} - -void ThreadPool::Enqueue(std::function f) -{ - std::unique_lock lock(tasksMutex); - tasks.push(f); - condition.notify_one(); -} - -void ThreadPool::Invoke() { - - std::function task; - while (true) - { - std::unique_lock lock(tasksMutex); - condition.wait(lock, [this] { return !tasks.empty() || terminate; }); - if (terminate && tasks.empty()) - { - return; - } - task = tasks.front(); - tasks.pop(); - task(); - } -} - -void ThreadPool::Shutdown() -{ - std::unique_lock lock(tasksMutex); - terminate = true; - condition.notify_all(); - - for (std::thread &thread : threadPool) - thread.join(); - - threadPool.empty(); - stopped = true; -} - -const ThreadPool &ThreadPool::operator=(ThreadPool &pool) -{ - return pool; -} - -ThreadPool::~ThreadPool() -{ - if (!stopped) - Shutdown(); -} \ No newline at end of file