diff --git a/include/VoidNet_HL/NetworkMessage.hpp b/include/VoidNet_HL/NetworkMessage.hpp index dcfda91..a5c3053 100644 --- a/include/VoidNet_HL/NetworkMessage.hpp +++ b/include/VoidNet_HL/NetworkMessage.hpp @@ -61,7 +61,7 @@ namespace std::net int32_t sizeOfNetHeader = sizeof(NetworkHeader); NetworkHeader header; - header.Size = 13 + sizeOfNetHeader + sizeof(T); + header.Size = 13 + sizeOfNetHeader + (m_data ? sizeof(T) : 0); byte *bytes = new byte[header.Size](); memcpy(bytes, &header, sizeOfNetHeader); @@ -75,7 +75,8 @@ namespace std::net memcpy(bytes + sizeOfNetHeader + 5, destination, 4); memcpy(bytes + sizeOfNetHeader + 9, tag, 4); - memcpy(bytes + 13 + sizeOfNetHeader, m_data, sizeof(T)); + if (m_data) + memcpy(bytes + 13 + sizeOfNetHeader, m_data, sizeof(T)); size = header.Size; return bytes; diff --git a/include/VoidNet_HL/TcpConnection.hpp b/include/VoidNet_HL/TcpConnection.hpp index cd6928e..1ee59b6 100644 --- a/include/VoidNet_HL/TcpConnection.hpp +++ b/include/VoidNet_HL/TcpConnection.hpp @@ -28,6 +28,12 @@ namespace std::net sendMessage(msg); } + void SendMessage(DistributionMode mode, uint32_t destinationId, uint32_t tag) + { + NetworkMessage msg(m_id, mode, destinationId, tag, nullptr, 0); + sendMessage(msg); + } + void ReceiveData(); function DataReceivedEvent; diff --git a/include/VoidNet_HL/TcpConnectionHandler.hpp b/include/VoidNet_HL/TcpConnectionHandler.hpp index ab8f31b..a23dba3 100644 --- a/include/VoidNet_HL/TcpConnectionHandler.hpp +++ b/include/VoidNet_HL/TcpConnectionHandler.hpp @@ -35,10 +35,10 @@ namespace std::net uint32_t GetAvailableID(); private: - void HandleReceiveMsgAndConns(); + void HandleConnections(); void HandleMessage(const NetworkMessage &msg); - void HandleReceiveMsgAndConnsThreaded(); + void HandleConnectionsThreaded(); private: vector> m_list; diff --git a/src/VoidNet_HL/NetworkMessage.cpp b/src/VoidNet_HL/NetworkMessage.cpp index aa5ba2b..1da57fc 100644 --- a/src/VoidNet_HL/NetworkMessage.cpp +++ b/src/VoidNet_HL/NetworkMessage.cpp @@ -28,7 +28,7 @@ namespace std::net int32_t sizeOfNetHeader = sizeof(NetworkHeader); NetworkHeader header; - header.Size = 13 + sizeOfNetHeader + m_dataSize; + header.Size = 13 + sizeOfNetHeader + (m_data ? m_dataSize : 0); byte *bytes = new byte[header.Size](); memcpy(bytes, &header, sizeOfNetHeader); @@ -42,7 +42,8 @@ namespace std::net memcpy(bytes + sizeOfNetHeader + 5, destination, 4); memcpy(bytes + sizeOfNetHeader + 9, tag, 4); - memcpy(bytes + 13 + sizeOfNetHeader, m_data, m_dataSize); + if (m_data) + memcpy(bytes + 13 + sizeOfNetHeader, m_data, m_dataSize); size = header.Size; return bytes; diff --git a/src/VoidNet_HL/TcpConnectionHandler.cpp b/src/VoidNet_HL/TcpConnectionHandler.cpp index d3e9b7d..39dd140 100644 --- a/src/VoidNet_HL/TcpConnectionHandler.cpp +++ b/src/VoidNet_HL/TcpConnectionHandler.cpp @@ -19,20 +19,22 @@ namespace std::net TcpConnectionHandler::~TcpConnectionHandler() { - m_run.exchange(false); + Stop(); } void TcpConnectionHandler::Start() { m_run.exchange(true); + m_pollFds.reserve(m_maxConnections); + pollfd master_fd; master_fd.fd = m_listenerPtr->m_socket->GetNativeSocket(); master_fd.events = POLLRDNORM; m_pollFds.emplace_back(master_fd); - thread receive_thread(&TcpConnectionHandler::HandleReceiveMsgAndConnsThreaded, this); - m_receiveThread.swap(receive_thread); + thread handleCons(&TcpConnectionHandler::HandleConnectionsThreaded, this); + m_receiveThread.swap(handleCons); } void TcpConnectionHandler::Stop() @@ -100,6 +102,7 @@ namespace std::net void TcpConnectionHandler::SetMaxConnections(uint32_t max_connections) { m_maxConnections = max_connections; + m_pollFds.reserve(m_maxConnections); } void TcpConnectionHandler::HandlePluginMessage(const NetworkMessage& message) @@ -107,7 +110,7 @@ namespace std::net m_pluginManager->HandleMessage(message); } - void TcpConnectionHandler::HandleReceiveMsgAndConns() + void TcpConnectionHandler::HandleConnections() { int res = poll(m_pollFds.data(), m_pollFds.size(), -1); @@ -259,9 +262,9 @@ namespace std::net HandlePluginMessage(msg); } - void TcpConnectionHandler::HandleReceiveMsgAndConnsThreaded() + void TcpConnectionHandler::HandleConnectionsThreaded() { while (m_run.load()) - HandleReceiveMsgAndConns(); + HandleConnections(); } } \ No newline at end of file diff --git a/src/VoidNet_HL/main.cpp b/src/VoidNet_HL/main.cpp index 879dea5..7416165 100644 --- a/src/VoidNet_HL/main.cpp +++ b/src/VoidNet_HL/main.cpp @@ -13,7 +13,7 @@ class Plugin : public std::net::Plugin { virtual void HandleMessage(const std::net::NetworkMessage& message) override { - + std::cout << "asd" << std::endl; } }; @@ -26,9 +26,16 @@ int main() std::net::TcpConnection con; con.Connect(std::net::IPAddress("127.0.0.1")); - - while (true) + + bool sent = false; + + while (con) // 8% of my cpu { con.ReceiveData(); + if (!sent) + { + sent = true; + con.SendMessage(std::net::DistributionMode::Server, 0, 1); + } } } \ No newline at end of file diff --git a/src/VoidNet_LL/Http.cpp b/src/VoidNet_LL/Http.cpp index d567c3a..d560dd9 100644 --- a/src/VoidNet_LL/Http.cpp +++ b/src/VoidNet_LL/Http.cpp @@ -43,9 +43,11 @@ namespace std::net int32_t sent; secure ? secure_socket->Recv((byte*)string.c_str(), string.size(), sent) : socket->Send((byte*)string.c_str(), string.size(), sent); - vector buffer(16384); // 16 KiB - stringstream ss; + // redo + byte* buffer[16384]; // 16 KiB + stringstream ss; + /* int32_t read; do { @@ -54,7 +56,7 @@ namespace std::net } while (read > 0); secure ? secure_socket->Close() : socket->Close(); - + */ return Response(ss.str()); }