Added DataAvailable method in TcpClient which will return the number of bytes available in the stream

Config functions are now inline
NetworkMessage and NetworkBuffer are being reworked
This commit is contained in:
xX-TheDoctor-Xx
2016-07-23 13:15:59 +01:00
parent c83b4101d0
commit 9e5cd40847
11 changed files with 41 additions and 16 deletions

4
TODO
View File

@ -8,4 +8,6 @@ new StringConverter class
implement close() in TcpClientWindows implement close() in TcpClientWindows
implement ConfigReader methods implement ConfigReader methods
Fix NetworkBuffer and NetworkMessage code

View File

@ -12,7 +12,7 @@ struct NetworkBuffer
NetworkBuffer(); NetworkBuffer();
~NetworkBuffer(); ~NetworkBuffer();
uint32 body_size; byte *header = nullptr;
byte *body = nullptr; byte *body = nullptr;
}; };

View File

@ -34,7 +34,12 @@ public:
bool Connect(); bool Connect();
bool DataAvailable(uint16 &size);
//this method will receive the messages automaticaly and use the callback methods
void ReceiveMessages(); void ReceiveMessages();
//this is a more manual method with no callbacks
const NetworkMessage &ReceiveMessage(); const NetworkMessage &ReceiveMessage();
void SendMessage(const NetworkMessage &message); void SendMessage(const NetworkMessage &message);

View File

@ -1,21 +1,21 @@
#include "Config.hpp" #include "Config.hpp"
void Config::SetUsingConsole(bool value) inline void Config::SetUsingConsole(bool value)
{ {
using_console = value; using_console = value;
} }
bool Config::GetUsingConsole() inline bool Config::GetUsingConsole()
{ {
return using_console; return using_console;
} }
void Config::SetLogToFile(bool value) inline void Config::SetLogToFile(bool value)
{ {
log_to_file = value; log_to_file = value;
} }
bool Config::GetLogToFile() inline bool Config::GetLogToFile()
{ {
return log_to_file; return log_to_file;
} }

View File

@ -26,7 +26,7 @@ NetworkMessage::~NetworkMessage()
const NetworkBuffer &NetworkMessage::EncodeMessage(const NetworkMessage &message) const NetworkBuffer &NetworkMessage::EncodeMessage(const NetworkMessage &message)
{ {
NetworkBuffer buffer; NetworkBuffer buffer;
uint16 size = buffer.body_size + 1; uint16 size = sizeof(buffer.body_size) + sizeof(buffer.body);
byte *encoded_message = new byte[size](); byte *encoded_message = new byte[size]();
buffer.body_size = size; buffer.body_size = size;

View File

@ -128,16 +128,19 @@ bool TcpClient::Connect()
return true; return true;
} }
bool TcpClient::DataAvailable(uint16 &size)
{
return ioctlsocket(tcp_socket, FIONREAD, (u_long*)size) != NO_ERROR && size > 0;
}
const NetworkBuffer &TcpClient::receive_data_array() const NetworkBuffer &TcpClient::receive_data_array()
{ {
NetworkBuffer buffer; NetworkBuffer buffer;
int32 header_received = recv(tcp_socket, reinterpret_cast<char*>(buffer.body_size), 4, 0); uint16 body_size;
if (DataAvailable(body_size))
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 buffer.body_size = body_size;
{ else return NetworkBuffer();
// there was a problem receiving the body size of the message or theres no header to receive
}
buffer.body = new byte[buffer.body_size](); buffer.body = new byte[buffer.body_size]();
int32 body_received = recv(tcp_socket, reinterpret_cast<char*>(buffer.body), buffer.body_size, 0); int32 body_received = recv(tcp_socket, reinterpret_cast<char*>(buffer.body), buffer.body_size, 0);
@ -157,11 +160,11 @@ void TcpClient::receive_data(TcpClient *client)
if (message.valid) if (message.valid)
{ {
if (message.tag == CONNECT) // some user has connected if (message.tag == CONNECT) // some user has connected
client->OnConnect(message.sender); std::async(std::launch::async, client->OnConnect, message.sender);
else if (message.tag == DISCONNECT) // some user has disconnected else if (message.tag == DISCONNECT) // some user has disconnected
client->OnDisconnect(message.sender); std::async(std::launch::async, client->OnDisconnect, message.sender);
else else
client->OnMessage(message.sender, message.tag, message.subject, message.data); // we received data std::async(std::launch::async, client->OnMessage, message.sender, message.tag, message.subject, message.data); // we received data
} }
} }
} }

View File

@ -145,3 +145,18 @@ const std::string & Utility::StringConverter::ToString(byte * bytes, uint16 star
{ {
// TODO: insert return statement here // TODO: insert return statement here
} }
const void Utility::ConfigReader::ReadConfig(const std::string & file_name)
{
return void();
}
const std::map<std::string, std::string>& Utility::ConfigReader::ReadNodes()
{
// TODO: insert return statement here
}
const std::string & Utility::ConfigReader::operator[](uint16 index)
{
// TODO: insert return statement here
}