From b42b26cadacf4251a651b002dd9b077c1bce415e Mon Sep 17 00:00:00 2001 From: xX-TheDoctor-Xx Date: Mon, 18 Jul 2016 21:48:34 +0100 Subject: [PATCH] Removed old callbacks Implemented new callback methods Made ReceiveData renamed to ReceiveMessages, returns void amd calls the callback methods --- DEV_INFO | 5 +-- TODO | 3 +- .../Release/VoidNetVS.tlog/CL.command.1.tlog | Bin 6526 -> 5306 bytes .../Release/VoidNetVS.tlog/CL.read.1.tlog | Bin 188988 -> 129188 bytes .../Release/VoidNetVS.tlog/CL.write.1.tlog | Bin 8910 -> 8060 bytes .../Release/VoidNetVS.tlog/unsuccessfulbuild | 0 VoidNetVS/VoidNetVS/VoidNetVS.vcxproj | 1 - VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters | 3 -- include/Callbacks.hpp | 21 ----------- include/Defs.hpp | 6 +-- include/TcpClient.hpp | 13 +++++-- include/VoidNetClient.hpp | 1 - src/NetworkMessage.cpp | 2 +- src/TcpClientWindows.cpp | 35 +++++++++++------- src/VoidNetClient.cpp | 14 +------ 15 files changed, 39 insertions(+), 65 deletions(-) create mode 100644 VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/unsuccessfulbuild delete mode 100644 include/Callbacks.hpp diff --git a/DEV_INFO b/DEV_INFO index ee5e530..eb5d275 100644 --- a/DEV_INFO +++ b/DEV_INFO @@ -1,5 +1,2 @@ id -1 is server / valid message if other parameters are valid as well -id -2 is invalid network message - - -currently working on: TcpClient::SendMessage \ No newline at end of file +id -2 is invalid network message \ No newline at end of file diff --git a/TODO b/TODO index e1d0eae..8aede5e 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,4 @@ initialization code for other operating systems - currently VoidNet only supports windows initialization code for tcp client for other operating systems - " -handle SendNetworkMessage errors for windows \ No newline at end of file +handle SendNetworkMessage errors for windows +handle ReceiveDataArray errors for windows \ No newline at end of file diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog index da2a2404e70c7cb00237a328df01d91f31f2e7bb..d72a6c079d51568f6bb27c12184bf26395939f56 100644 GIT binary patch delta 7 Ocmexov`cftE)f6_0|Sx( delta 63 zcmdm``Oj#>E|JMqEJl+!r8ch;`ouVS4vWAfPAlFp27d-m1{VfD23LlV>6}nNWo$ I&u5VY0ET)I00000 diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog index 4721096624434d757fbf72b5ba336c254342f414..f06545590e25fbbfa0c6d77ef58cacc378acea49 100644 GIT binary patch delta 11 TcmdmUgnP+H_J%EtOMUAUMu;`EF-SyEgtkH@O{`E^QL^1^O~`H&)@_Yes6B{(LW@wgvP2}q zh!6B)p@$xY3W|ED5PGnR0M{w-dj z%m_MBljAZt)I5b=vio{ac2GvVi#-4ne?YYhMT(1lOo?=PF-EN)=tWg%LX|tIN>AoQXTZ1!r;D{kmq78x%{Oz940XMnVOOrOj}We)0zvClvvjC zAo_7-hO4T5fuw?*|2*6`!*P)br}(ienkjh>hf@1M=H2H@eT>%c<6(Id&+`PjjQh)A jfobVm9ZyhBVCG;RPAWP7vhB0~&ZcBHFx&CB!(Y1xXXqTl diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog index 99fa2d00dff1845195e354e37e2e99db13bc7aed..78d5573f86a44c62af0adce8fc29c2c171844d10 100644 GIT binary patch delta 7 OcmX@-`p0fVjXVGlQUjR) delta 40 ycmV+@0N4NgKF&q3d>@m}9wM_46vhFQU=SdazyT - diff --git a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters index 33f075c..4ad2aac 100644 --- a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters +++ b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters @@ -39,9 +39,6 @@ include - - include - include diff --git a/include/Callbacks.hpp b/include/Callbacks.hpp deleted file mode 100644 index e751357..0000000 --- a/include/Callbacks.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef CALLBACKS_HPP -#define CALLBACKS_HPP - -#ifdef _MSC_VER -#pragma once -#endif - -#include "Defs.hpp" -#include "Serializer.hpp" - -/*Client Callbacks begin*/ - -void OnMessage(uint16 sender, uint16 tag, uint16 subject, void *data); - -void OnDisconnect(uint16 id); - -void OnConnect(uint16 id); - -/*Client Callbacks end*/ - -#endif \ No newline at end of file diff --git a/include/Defs.hpp b/include/Defs.hpp index 0a47b54..9c28956 100644 --- a/include/Defs.hpp +++ b/include/Defs.hpp @@ -184,13 +184,11 @@ enum VoidCode enum DistributionType { - All, - AllAndMe, + All = 1, // Others and Server + AllAndMe, // Other, Server and Ourselfs Server, Others, ID, - Reply, - Custom, }; #endif // DEFS_HPP \ No newline at end of file diff --git a/include/TcpClient.hpp b/include/TcpClient.hpp index 3cc68ab..2ca1889 100644 --- a/include/TcpClient.hpp +++ b/include/TcpClient.hpp @@ -6,6 +6,7 @@ #include #include +#include #ifdef _MSC_VER #pragma once @@ -28,17 +29,23 @@ public: VoidCode Connect(); - NetworkBuffer ReceiveDataArray(); - const NetworkMessage &ReceiveData(); + void ReceiveMessages(); void SendMessage(const NetworkMessage &message); + std::function OnDisconnect; + std::function OnConnect; + std::function OnMessage; + private: + const NetworkBuffer &ReceiveDataArray(); + static void ReceiveData(TcpClient *client); static void SendNetworkMessage(const NetworkMessage &message, TcpClient *client); VoidCode Initialize(const std::string &ip, uint16 port = default_port); - + std::string ip; uint16 port = 0; bool initialized = false; + bool receive = false; #ifdef _MSC_VER SOCKET tcp_socket = INVALID_SOCKET; diff --git a/include/VoidNetClient.hpp b/include/VoidNetClient.hpp index 44ce6b4..effcda5 100644 --- a/include/VoidNetClient.hpp +++ b/include/VoidNetClient.hpp @@ -8,7 +8,6 @@ #include "Defs.hpp" #include "Init.hpp" #include "TcpClient.hpp" -#include "Callbacks.hpp" #include "NetworkBuffer.hpp" #include "NetworkMessage.hpp" diff --git a/src/NetworkMessage.cpp b/src/NetworkMessage.cpp index c81ef15..2824f72 100644 --- a/src/NetworkMessage.cpp +++ b/src/NetworkMessage.cpp @@ -86,6 +86,6 @@ const NetworkMessage &NetworkMessage::DecodeMessageHeader(const NetworkBuffer &b tag = buffer.body[6]; subject = Utility::BitConverter::ToUint16(buffer.body, 7); this->buffer = buffer; - valid = sender != -2 && tag != CONNECT && tag != DISCONNECT; + valid = sender != -2 && tag != CONNECT && tag != DISCONNECT && distribution_mode > 0; return *this; } diff --git a/src/TcpClientWindows.cpp b/src/TcpClientWindows.cpp index 5b8712b..201a620 100644 --- a/src/TcpClientWindows.cpp +++ b/src/TcpClientWindows.cpp @@ -2,7 +2,6 @@ #include "Utility.hpp" #include "Config.hpp" #include "NetworkBuffer.hpp" -#include "Callbacks.hpp" #include "Tags.hpp" #include @@ -99,9 +98,11 @@ VoidCode TcpClient::Connect() uint16 connect_code = ::connect(tcp_socket, ptr->ai_addr, ptr->ai_addrlen); if (connect_code == SOCKET_ERROR) return VOID_COULDNT_CONNECT; + receive = true; + return VOID_SUCCESS; } -NetworkBuffer TcpClient::ReceiveDataArray() +const NetworkBuffer &TcpClient::ReceiveDataArray() { NetworkBuffer buffer; @@ -110,7 +111,6 @@ NetworkBuffer TcpClient::ReceiveDataArray() if (header_received != 4 || WSAGetLastError() != 0) // this header is completely unrelated to the network message header - this header is the body size of the network message { // there was a problem receiving the body size of the message or theres no header to receive - return NetworkBuffer(); } buffer.body = new byte[buffer.body_size](); @@ -118,22 +118,31 @@ NetworkBuffer TcpClient::ReceiveDataArray() if (body_received == SOCKET_ERROR || body_received != buffer.body_size || WSAGetLastError() != 0) { //there was a problem receiving the body of the message or theres no body to receive - return NetworkBuffer(); } return buffer; } -const NetworkMessage &TcpClient::ReceiveData() +void TcpClient::ReceiveData(TcpClient *client) { - NetworkMessage message(ReceiveDataArray()); - if (message.tag == CONNECT) - OnConnect(message.sender); - else if (message.tag == DISCONNECT) - OnDisconnect(message.sender); - else - OnMessage(message.sender, message.tag, message.subject, message.data); - return message; + while (client->receive) + { + NetworkMessage message(client->ReceiveDataArray()); + if (message.valid) + { + if (message.tag == CONNECT) // some user has connected + client->OnConnect(message.sender); + else if (message.tag == DISCONNECT) // some user has disconnected + client->OnDisconnect(message.sender); + else + client->OnMessage(message.sender, message.tag, message.subject, message.data); // we received data + } + } +} + +void TcpClient::ReceiveMessages() +{ + std::async(std::launch::async, &ReceiveData, this); } void TcpClient::SendNetworkMessage(const NetworkMessage &message, TcpClient *client) diff --git a/src/VoidNetClient.cpp b/src/VoidNetClient.cpp index 56a4549..46d2b0d 100644 --- a/src/VoidNetClient.cpp +++ b/src/VoidNetClient.cpp @@ -56,19 +56,7 @@ void VoidNetClientAPI::Receive() void VoidNetClientAPI::ProcessAllData() { - while (receive) - { - NetworkMessage message = client->ReceiveDataArray(); - if (message.valid) - { - if (message.tag == CONNECT) - OnConnect(message.sender); - else if (message.tag == DISCONNECT) - OnDisconnect(message.sender); - else - OnMessage(message.sender, message.tag, message.subject, message.data); - } - } + client->ReceiveMessages(); } void VoidNetClientAPI::Disconnect()