From 255f3551cc8c0465a2bf403d84239874ebdf2209 Mon Sep 17 00:00:00 2001 From: xX-TheDoctor-Xx Date: Tue, 2 Aug 2016 12:57:56 +0100 Subject: [PATCH] Added missing global TcpClient.cpp file Fixed Serializer from_bytes parentisis missing Fixed client shutdown, now it sends a message saying its disconnected in TcpServerWindows --- .../Release/VoidNetVS.tlog/CL.command.1.tlog | Bin 3506 -> 5374 bytes .../Release/VoidNetVS.tlog/CL.read.1.tlog | Bin 138306 -> 220202 bytes .../Release/VoidNetVS.tlog/CL.write.1.tlog | Bin 5996 -> 8418 bytes .../VoidNetVS.tlog/Lib-link.write.1.tlog | Bin 1056 -> 1162 bytes .../Release/VoidNetVS.tlog/Lib.read.1.tlog | Bin 2434 -> 2786 bytes .../Release/VoidNetVS.tlog/lib.command.1.tlog | Bin 1486 -> 1634 bytes VoidNetVS/VoidNetVS/TcpClient.cpp | 3 ++ VoidNetVS/VoidNetVS/VoidNetVS.vcxproj | 1 + VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters | 3 ++ src/NetworkMessage.cpp | 1 - src/Serializer.cpp | 2 +- src/TcpClientWindows.cpp | 1 - src/TcpServerWindows.cpp | 42 +++++++++++++----- src/VoidNetClient.cpp | 1 - 14 files changed, 38 insertions(+), 16 deletions(-) create mode 100644 VoidNetVS/VoidNetVS/TcpClient.cpp diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog index dd3d999077af2467906fe617e340518b36e2fb79..7f2cd02498a4febe7eb133299b54dd075baa4bb2 100644 GIT binary patch delta 233 zcmdla{ZDg)6X)hWZWX4wC zfr@;9WYlJVPDUnl!O4Q0hLT|n{y+sT41PcjAq>u7<*q(x!IdFsVzw@SFo=N=o_^nwQGH^709ZXY zlEn60D@J+a>3fP9>!x!oVeFeMvz2eUf+b_qW|^%@jN9vq7=xH57sRq{mb3h!0&%j2+w4mNUL$+MczVF^p;Yjb)5|)BRR4_G~|}mT?KIDvGfTVGO|xF+dX8 x9YC?^>vI{!CqKy4n9c{ZWIE6ip6Lo!jBX&79g;IHT;SUd4ALtW#8}?L3IHCChjIV_ delta 155 zcmZ3rgZI!5j)pCamn^3nJZ56!4rXv=2x15Wk<;&6GAd7;z=0{@_?XF^9jbCWBQKM@ z@$_?ZnbfxH&10HkK5?7c!~}`yc8eL+Cf<>oJTFUc@`U+e)3yAWd#3ZL7fp&3?RUjFY`s6((`TOx6*Qn4G|*!5YHg p%n&e{oBi_SK5n+jZ`ji&-(yz;DVqF`tqI7N0J2e4rbAUq008HwJbC~C delta 22 ecmaFl_(pGogV-c4smVT4L6iHqFM#44MovKsiqaXRz8}pn5lk5TJY*P%M}s6sXe&$O{IFg)+DR#r%Oh zLk1HDJq81y&M=_97zQVxxF3-A0n^?D<=^oQ$4^}atm;?aNh6~aF delta 21 dcmaFFbB=q%4W`K_SVcC6G2dfi;bq`r003ak2F(Bf diff --git a/VoidNetVS/VoidNetVS/TcpClient.cpp b/VoidNetVS/VoidNetVS/TcpClient.cpp new file mode 100644 index 0000000..2b86fe3 --- /dev/null +++ b/VoidNetVS/VoidNetVS/TcpClient.cpp @@ -0,0 +1,3 @@ +#ifdef _MSC_VER +#include "TcpClientWindows.cpp" +#endif \ No newline at end of file diff --git a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj index cba33dd..cae03af 100644 --- a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj +++ b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj @@ -51,6 +51,7 @@ + diff --git a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters index 712a5e1..359ffbc 100644 --- a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters +++ b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters @@ -83,6 +83,9 @@ src + + src + diff --git a/src/NetworkMessage.cpp b/src/NetworkMessage.cpp index bdab4b7..d3ba6f0 100644 --- a/src/NetworkMessage.cpp +++ b/src/NetworkMessage.cpp @@ -1,7 +1,6 @@ #include "NetworkMessage.hpp" #include "Utility.hpp" #include "Serializer.hpp" -#include "Tags.hpp" #include diff --git a/src/Serializer.cpp b/src/Serializer.cpp index 1253722..01d1fca 100644 --- a/src/Serializer.cpp +++ b/src/Serializer.cpp @@ -14,7 +14,7 @@ template const std::vector &Serializer::to_bytes(const T& obje template const T& Serializer::from_bytes(const std::vector &bytes, T& object) { static_assert(std::is_trivially_copyable::value, "not a TriviallyCopyable type"); - std::copy(bytes.begin(), bytes.end(), reinterpret_cast(std::addressof(object)); + std::copy(bytes.begin(), bytes.end(), reinterpret_cast(std::addressof(object))); return object; } \ No newline at end of file diff --git a/src/TcpClientWindows.cpp b/src/TcpClientWindows.cpp index 323ad4b..02a9351 100644 --- a/src/TcpClientWindows.cpp +++ b/src/TcpClientWindows.cpp @@ -2,7 +2,6 @@ #include "Utility.hpp" #include "Config.hpp" #include "NetworkBuffer.hpp" -#include "Tags.hpp" #include "Handshake.hpp" #include diff --git a/src/TcpServerWindows.cpp b/src/TcpServerWindows.cpp index 5133728..39ddf53 100644 --- a/src/TcpServerWindows.cpp +++ b/src/TcpServerWindows.cpp @@ -72,7 +72,10 @@ TcpServer::~TcpServer() void TcpServer::Shutdown() { for (std::vector::iterator it = clients.begin(); it != clients.end(); ++it) - (*it).Shutdown(); + { + TcpClient client = *it; + client.Shutdown(); + } } bool TcpServer::StartServer(bool accept_connections) @@ -201,7 +204,8 @@ uint16 TcpServer::AllocateID() // this function is only used in the AddToClients bool flag = true; for (std::vector::iterator it = clients.begin(); it != clients.end(); ++it) { - if ((*it).GetID() == i) + TcpClient client = *it; + if (client.GetID() == i) { flag = false; break; @@ -235,7 +239,7 @@ void TcpServer::RejectConnection(TcpClient &client) { Handshake handshake(client.GetID(), ConnectionCode::Reject); client.SendBytes(Handshake::EncodeHandshake(handshake)); - client.Shutdown(); + CloseSocket(client); } void TcpServer::AcceptConnection(TcpClient & client) @@ -246,13 +250,26 @@ void TcpServer::AcceptConnection(TcpClient & client) void TcpServer::CloseSocket(TcpClient & client) { - NetworkMessage message; - message.sender = -1; - message.distribution_mode = ID; - message.destination_id = client.GetID(); - message.tag = DISCONNECT; - SendMessage(message); - clients.erase(std::remove(clients.begin(), clients.end(), client), clients.end()); + bool removed; + for (std::vector::iterator it = clients.begin(); it != clients.end(); ++it) + { + TcpClient it_client = *it; + if (client.GetID() == it_client.GetID()) + { + clients.erase(it); + removed = true; + } + } + + if (removed) + { + NetworkMessage message; + message.sender = -1; + message.distribution_mode = ID; + message.destination_id = client.GetID(); + message.tag = DISCONNECT; + SendMessage(message); + } } void TcpServer::CloseSocket(uint16 id) @@ -266,8 +283,9 @@ const TcpClient & TcpServer::GetClientByID(uint16 id) { for (std::vector::iterator it = clients.begin(); it != clients.end(); ++it) { - if ((*it).GetID() == id) - return *it; + TcpClient client = *it; + if (client.GetID() == id) + return client; } return TcpClient(); } diff --git a/src/VoidNetClient.cpp b/src/VoidNetClient.cpp index 62863c1..de6eeab 100644 --- a/src/VoidNetClient.cpp +++ b/src/VoidNetClient.cpp @@ -1,6 +1,5 @@ #include "VoidNetClient.hpp" #include "Utility.hpp" -#include "Tags.hpp" #include