From e5ca02be0d127f7981045a2212d000380ea30a30 Mon Sep 17 00:00:00 2001 From: xX-TheDoctor-Xx Date: Mon, 15 Aug 2016 17:46:29 +0100 Subject: [PATCH] TcpServer's OnMessage is now an vector called OnMessageFunctions, each plugin will occupy an index in this vector Readded receive_data method to VoidNetClient.hpp Minor fixes --- .../Release/VoidNetVS.tlog/CL.command.1.tlog | Bin 5898 -> 5294 bytes .../Release/VoidNetVS.tlog/CL.read.1.tlog | Bin 251934 -> 221080 bytes .../Release/VoidNetVS.tlog/CL.write.1.tlog | Bin 12886 -> 12482 bytes .../Release/VoidNetVS.tlog/unsuccessfulbuild | 0 include/TcpServer.hpp | 3 ++- include/VoidNetClient.hpp | 3 ++- src/TcpClientWindows.cpp | 4 ++-- src/TcpServer.cpp | 11 +++++++---- src/VoidNetClient.cpp | 10 +++++++--- 9 files changed, 20 insertions(+), 11 deletions(-) create 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 7f91709e0057b0cde4b1b708fdd90c73666639cc..937ff5b46a4c3545cf904a4e52f289a697857783 100644 GIT binary patch delta 20 bcmeCuTc^3fPGEDFkPFi!0k+L90%}YEN&N-- delta 79 zcmZ3d*`>F^PGIr`5xLC^g!q^?%L$|~@rE(@Gk7w%F!(XJGK6gY&dbT9h9bn^%-{o5 T;0ja_!k`D_1ppy00~Z4T0dNnk diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog index 57bc734366ff639955950f8aae4000606122c0db..fef2bccf3945825d37df8d917d59d6fc496feedf 100644 GIT binary patch delta 62 zcmV-E0KxyBun(BO4S<9Jv;ru7x5D-U_Gq^#eF9KxmsorP9+!|e0w$4Q9+NPjc(*oh U0(1e2Ti`fA~IP|Kw)y6 z4BzB+oP3ifu(3^!6AzlafHP$B0THpueR@HY4~V6J#bhMhCSTA`n`|I02i7BJm@)Z) boD_(?c>%8!BT#~E5|0E}4#)@Vfd~Nr_G>P~ delta 168 zcmX?y#UB|nmj=pCayR6fQT4E lolYNI{Q_RL$@f%6fR=;wfGn4q948K8+v#P%)#Zpz0svfQLGAzm diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/unsuccessfulbuild b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/unsuccessfulbuild new file mode 100644 index 0000000..e69de29 diff --git a/include/TcpServer.hpp b/include/TcpServer.hpp index 22e6b47..bea2620 100644 --- a/include/TcpServer.hpp +++ b/include/TcpServer.hpp @@ -7,6 +7,7 @@ #include "Defs.hpp" #include "TcpClient.hpp" +#include "Handshake.hpp" #include @@ -38,7 +39,7 @@ public: const TcpClient &GetClientByID(uint16 id); - std::function OnMessage; // this is going to be used for plugins + std::vector> OnMessageFunctions; // this is going to be used for plugins private: static void process_client_messages(TcpServer *server, TcpClient &client); diff --git a/include/VoidNetClient.hpp b/include/VoidNetClient.hpp index 9a564d8..5bf0c51 100644 --- a/include/VoidNetClient.hpp +++ b/include/VoidNetClient.hpp @@ -30,9 +30,10 @@ struct VoidNetClientAPI static void Receive(); private: + static void receive_data(); + static TcpClient client; static uint16 id; - static bool receive; }; #endif diff --git a/src/TcpClientWindows.cpp b/src/TcpClientWindows.cpp index 3b6a49d..2e2c4d9 100644 --- a/src/TcpClientWindows.cpp +++ b/src/TcpClientWindows.cpp @@ -55,8 +55,8 @@ void TcpClient::Shutdown() { NetworkMessage message; message.sender = id; - message.distribution_mode = static_cast(Server); - message.tag = static_cast(DISCONNECT); + message.distribution_mode = Server; + message.tag = DISCONNECT; SendMessage(message); uint16 code = closesocket(tcp_socket); if (code == SOCKET_ERROR) diff --git a/src/TcpServer.cpp b/src/TcpServer.cpp index 471b445..d153329 100644 --- a/src/TcpServer.cpp +++ b/src/TcpServer.cpp @@ -60,7 +60,8 @@ void TcpServer::SendMessage(const NetworkMessage & message) if (message.sender != client.GetID()) client.SendMessage(message); } - OnMessage(message); + for (uint16 i = 0; i < OnMessageFunctions.size(); i++) + OnMessageFunctions[i](message); break; } case AllAndMe: // this will send the message to EVERYONE including the user that sent it @@ -70,14 +71,16 @@ void TcpServer::SendMessage(const NetworkMessage & message) TcpClient client = *it; client.SendMessage(message); } - OnMessage(message); + for (uint16 i = 0; i < OnMessageFunctions.size(); i++) + OnMessageFunctions[i](message); break; } case Server: // this will only send the message to the server { if (message.tag == DISCONNECT) CloseSocket(message.sender); - OnMessage(message); + for (uint16 i = 0; i < OnMessageFunctions.size(); i++) + OnMessageFunctions[i](message); break; } case Others: // this will send the message to others, excluding server and the user that sent it @@ -106,7 +109,7 @@ void TcpServer::SendMessage(const NetworkMessage & message) } } -void TcpServer::SendHandshake(const Handshake &handshake) +void TcpServer::SendHandshake(const Handshake & handshake) { switch (handshake.distribution_mode) { diff --git a/src/VoidNetClient.cpp b/src/VoidNetClient.cpp index 408df29..776074c 100644 --- a/src/VoidNetClient.cpp +++ b/src/VoidNetClient.cpp @@ -52,11 +52,15 @@ void VoidNetClientAPI::SendMessage(byte distribution_mode, uint16 destination_id void VoidNetClientAPI::Receive() { - std::async(std::launch::async, &client.ReceiveMessages); + std::async(std::launch::async, &receive_data); +} + +void VoidNetClientAPI::receive_data() +{ + client.ReceiveMessages(); } void VoidNetClientAPI::Disconnect() { - receive = false; - SendMessageToServer + client.Shutdown(); }