From a9549c33e3620cd5be5a7c0a1565d63b4cf49c9e Mon Sep 17 00:00:00 2001 From: xX-TheDoctor-Xx Date: Fri, 16 Sep 2016 20:38:30 +0100 Subject: [PATCH] Added linux includes for networking TcpClient: added close_connection to shutdown the connection on both send and receive TcpServer: changed clients list initialization from constructors to using the reserve function --- .../Release/VoidNetVS.tlog/CL.command.1.tlog | Bin 6898 -> 8602 bytes .../Release/VoidNetVS.tlog/CL.read.1.tlog | Bin 305822 -> 399206 bytes .../Release/VoidNetVS.tlog/CL.write.1.tlog | Bin 16872 -> 19348 bytes .../VoidNetVS.tlog/Lib-link.write.1.tlog | Bin 1512 -> 1374 bytes .../Release/VoidNetVS.tlog/Lib.read.1.tlog | Bin 3506 -> 3076 bytes .../Release/VoidNetVS.tlog/lib.command.1.tlog | Bin 2142 -> 1930 bytes .../Release/VoidNetVS.tlog/unsuccessfulbuild | 0 include/Defs.hpp | 8 ++++++++ include/TcpClient.hpp | 1 + src/TcpClient.cpp | 13 ++++++++++++- src/TcpServer.cpp | 4 ++-- 11 files changed, 23 insertions(+), 3 deletions(-) delete mode 100644 VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/unsuccessfulbuild diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog index 76b2a9680faeef7e70f31ff1060afadf94f597d1..182af7bf4c77dce284a6b2c77413a5ee14564eab 100644 GIT binary patch delta 160 zcmexlI?H*(E&j=;q%=0alVD+*tjDCV`4+zo(_{xRxy^j+j~FNWh)94$Swk6I7y>5u zN=O2Q?=Zr-mV#gjhF}I)h9HJ85V@I={Usx&@MJ|M-N`&6QkxBg#F!>GNT`7g0y5ly cma$F#z`?VbiTxKNj~;_FLjVx+GH@{f03A&zcmMzZ delta 58 zcmbQ`{K<5~E&k1FLN-j3WTiIqvEN~wBx^Ofk40#5o*2*O1`#Qy$u{z8n-gS}m?qy7 J)BvjhF#u1D6FdL_ diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog index 1d6b058a2ef15dfc6cc82392e676e4e9cd6e3598..e73b1e9558b4c43c8653e71af864df031daca839 100644 GIT binary patch delta 780 zcmb7CJxc>Y5S_gZL4-)KvJno8U}K0TD2hm;Q3;-RA-O0@1X~qE1c?Zm6q3S1j1d+r zL~H~L5fWG#V5EXNB6V zG>E-;{Ii?)haC-aD4nOAs%!s1-#A;D;&U zD|2tYy6eeJH|2wYZSh>@staj~Qk(`UMq^?%t8`h2Lhjb^+Z=#~q%Xr-I>o}7vL>HT z`GHHUXiSyv2jys1y07@loTzj=Hsw~p@uZ099><1MFZg1e*wwiw{lRT3cxeD?QF2i| zydFx@I7LWD4+gwA;$hO@_frTqLX)s2tbv*&@&>xJVjXqgaTwe~s7wH3k{4MGwI3Sk zKSbg*fdUh-QSwsJ32eoB2-Z$)0>MgrX{z7ec#_)5hm;@d8bFT;+VA%?su0kP6HZ~CTBpAU>KK9 z#sl`ZHX{Y{YnR{+29CFE3I^%|w{Q*yRsxr>2nGa~pt%EzmmW3*jJM#j1gr&@ARPh@ Omp*_25Vwqm0_thD7%K?? diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog index 18eafe6d56b7ebbaf9c34ee1589572d89f540faa..39de28dc83927df49a229730b1d85939151be08c 100644 GIT binary patch delta 232 zcmaFS%s6E_Saq-FP#3d#k;9w4AaG7i?CO&xskHY46rechf9oS1I9}vs{O9ZNAf@w#^%*h|P z*d`xPli2(~OO0vsISVN!pdBic^Bk)t-xIX~+7mQcPg?=VRsgwUlB&q$393O*O%`B7 rK8iyO`)FqkwH3k-RFej41KK`$jdjoD1h%Hh4w67Gu|k~xflCem-RA%xm#-Pc1+6t4;xhqZnU@8LU9}tw8&G6Dc_<`X#p diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib.read.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib.read.1.tlog index 37a64418ec7733085f0d9ae0c911134cd38dc187..349279243ac672919a54d1db59c83b92112512c1 100644 GIT binary patch delta 65 zcmdla-6FA}fpKyI6W``Pj9VBdYp|p+hcdWKc4kfo)BCx^C)=XL2yM8NpUf?*@58dwQ*w%L z#fpyp^u0vZ@-V)P5}<6i|Hyy>v$W8Mi5S|b!^Z?uVm+Qs3}K%ie*|CH2NGHe1=b=h%%Q?Q-BO;awxS~ HyYFBx5MDXj diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/lib.command.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/lib.command.1.tlog index 81515215a16b77cb751d10dd2125e57a77c70721..3565fb182a2c8d3803ee806db8feef8d6f99e146 100644 GIT binary patch delta 70 zcmca7(8a%@fpKyI6W``Pj9VBd2e6AwwqXfi4rOqe?97}FrhVDPL1LR(Sc{mLT^Ir; QFK1VUO60TfGH@{f0OZXQ6#xJL delta 174 zcmeC;zbCMvfpM||BL{CdgC~O@gA0Q{LpVe5WJQ+9%?*r)7$?tR? A!~g&Q diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/unsuccessfulbuild b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/unsuccessfulbuild deleted file mode 100644 index e69de29..0000000 diff --git a/include/Defs.hpp b/include/Defs.hpp index ec596ab..cca3cb3 100644 --- a/include/Defs.hpp +++ b/include/Defs.hpp @@ -245,4 +245,12 @@ enum InternalTags #define IS_HANDSHAKE(name) name.subject == 1 || (name.tag == DisconnectTag || name.tag == ConnectTag || name.tag == Accept || name.tag == Close || name.tag == Reject) +#ifdef __linux__ +#include +#include +#include +#include +void closesocket(int socket) { close(socket); } +#endif + #endif // DEFS_HPP \ No newline at end of file diff --git a/include/TcpClient.hpp b/include/TcpClient.hpp index c6d8766..57907bc 100644 --- a/include/TcpClient.hpp +++ b/include/TcpClient.hpp @@ -57,6 +57,7 @@ private: const NetworkBuffer &receive_data_array(); static void receive_data(TcpClient *client); static bool send_network_message(const NetworkMessage &message, TcpClient *client); + static void close_connection(TcpClient *client); bool initialize(const std::string &ip, uint16 port = default_client_port); diff --git a/src/TcpClient.cpp b/src/TcpClient.cpp index b9b6b06..ef80498 100644 --- a/src/TcpClient.cpp +++ b/src/TcpClient.cpp @@ -60,8 +60,13 @@ void TcpClient::receive_data(TcpClient *client) { if (message.tag == ConnectTag) // some user has connected - not us, never std::async(std::launch::async, client->OnConnect, message.sender); - else if (message.tag == DisconnectTag || message.tag == Close) // some user has disconnected, it can be us + else if (message.tag == DisconnectTag) // some user has disconnected, it can be us std::async(std::launch::async, client->OnDisconnect, message.sender); + else if (message.tag == Close) + { + std::async(std::launch::async, client->OnDisconnect, message.sender); + close_connection(client); + } } else std::async(std::launch::async, client->OnMessage, message.sender, message.tag, message.subject, message.data); // we received data @@ -228,6 +233,12 @@ bool TcpClient::send_network_message(const NetworkMessage &message, TcpClient *c return bytes_sent == SOCKET_ERROR || bytes_sent != lenght || WSAGetLastError() != 0; } +void TcpClient::close_connection(TcpClient * client) +{ + shutdown(client->tcp_socket, SD_BOTH); + closesocket(client->tcp_socket); +} + bool TcpClient::SendBytes(const std::vector& bytes) { int32 bytes_sent = send(tcp_socket, reinterpret_cast(bytes.data()), bytes.size(), 0); diff --git a/src/TcpServer.cpp b/src/TcpServer.cpp index 836ce43..07a8163 100644 --- a/src/TcpServer.cpp +++ b/src/TcpServer.cpp @@ -10,13 +10,13 @@ TcpServer::TcpServer() { initialize(); // initialize with the default port - clients = std::vector(max_connections); + clients.reserve(max_connections); } TcpServer::TcpServer(uint16 port) { initialize(port); - clients = std::vector(max_connections); + clients.reserve(max_connections); } TcpServer::~TcpServer()