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:
2
TODO
2
TODO
@ -9,3 +9,5 @@ new StringConverter class
|
|||||||
implement close() in TcpClientWindows
|
implement close() in TcpClientWindows
|
||||||
|
|
||||||
implement ConfigReader methods
|
implement ConfigReader methods
|
||||||
|
|
||||||
|
Fix NetworkBuffer and NetworkMessage code
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -12,7 +12,7 @@ struct NetworkBuffer
|
|||||||
NetworkBuffer();
|
NetworkBuffer();
|
||||||
~NetworkBuffer();
|
~NetworkBuffer();
|
||||||
|
|
||||||
uint32 body_size;
|
byte *header = nullptr;
|
||||||
byte *body = nullptr;
|
byte *body = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user