Renaming, Fixed NetworkMessage serialization and performance improvement with vectors in connection handler
This commit is contained in:
@ -61,7 +61,7 @@ namespace std::net
|
||||
int32_t sizeOfNetHeader = sizeof(NetworkHeader);
|
||||
|
||||
NetworkHeader header;
|
||||
header.Size = 13 + sizeOfNetHeader + sizeof(T);
|
||||
header.Size = 13 + sizeOfNetHeader + (m_data ? sizeof(T) : 0);
|
||||
|
||||
byte *bytes = new byte[header.Size]();
|
||||
memcpy(bytes, &header, sizeOfNetHeader);
|
||||
@ -75,7 +75,8 @@ namespace std::net
|
||||
memcpy(bytes + sizeOfNetHeader + 5, destination, 4);
|
||||
memcpy(bytes + sizeOfNetHeader + 9, tag, 4);
|
||||
|
||||
memcpy(bytes + 13 + sizeOfNetHeader, m_data, sizeof(T));
|
||||
if (m_data)
|
||||
memcpy(bytes + 13 + sizeOfNetHeader, m_data, sizeof(T));
|
||||
|
||||
size = header.Size;
|
||||
return bytes;
|
||||
|
||||
@ -28,6 +28,12 @@ namespace std::net
|
||||
sendMessage(msg);
|
||||
}
|
||||
|
||||
void SendMessage(DistributionMode mode, uint32_t destinationId, uint32_t tag)
|
||||
{
|
||||
NetworkMessage msg(m_id, mode, destinationId, tag, nullptr, 0);
|
||||
sendMessage(msg);
|
||||
}
|
||||
|
||||
void ReceiveData();
|
||||
|
||||
function<void(uint32_t, DistributionMode, uint32_t, uint32_t, void*)> DataReceivedEvent;
|
||||
|
||||
@ -35,10 +35,10 @@ namespace std::net
|
||||
uint32_t GetAvailableID();
|
||||
|
||||
private:
|
||||
void HandleReceiveMsgAndConns();
|
||||
void HandleConnections();
|
||||
void HandleMessage(const NetworkMessage &msg);
|
||||
|
||||
void HandleReceiveMsgAndConnsThreaded();
|
||||
void HandleConnectionsThreaded();
|
||||
|
||||
private:
|
||||
vector<shared_ptr<TcpConnection>> m_list;
|
||||
|
||||
@ -28,7 +28,7 @@ namespace std::net
|
||||
int32_t sizeOfNetHeader = sizeof(NetworkHeader);
|
||||
|
||||
NetworkHeader header;
|
||||
header.Size = 13 + sizeOfNetHeader + m_dataSize;
|
||||
header.Size = 13 + sizeOfNetHeader + (m_data ? m_dataSize : 0);
|
||||
|
||||
byte *bytes = new byte[header.Size]();
|
||||
memcpy(bytes, &header, sizeOfNetHeader);
|
||||
@ -42,7 +42,8 @@ namespace std::net
|
||||
memcpy(bytes + sizeOfNetHeader + 5, destination, 4);
|
||||
memcpy(bytes + sizeOfNetHeader + 9, tag, 4);
|
||||
|
||||
memcpy(bytes + 13 + sizeOfNetHeader, m_data, m_dataSize);
|
||||
if (m_data)
|
||||
memcpy(bytes + 13 + sizeOfNetHeader, m_data, m_dataSize);
|
||||
|
||||
size = header.Size;
|
||||
return bytes;
|
||||
|
||||
@ -19,20 +19,22 @@ namespace std::net
|
||||
|
||||
TcpConnectionHandler::~TcpConnectionHandler()
|
||||
{
|
||||
m_run.exchange(false);
|
||||
Stop();
|
||||
}
|
||||
|
||||
void TcpConnectionHandler::Start()
|
||||
{
|
||||
m_run.exchange(true);
|
||||
|
||||
m_pollFds.reserve(m_maxConnections);
|
||||
|
||||
pollfd master_fd;
|
||||
master_fd.fd = m_listenerPtr->m_socket->GetNativeSocket();
|
||||
master_fd.events = POLLRDNORM;
|
||||
m_pollFds.emplace_back(master_fd);
|
||||
|
||||
thread receive_thread(&TcpConnectionHandler::HandleReceiveMsgAndConnsThreaded, this);
|
||||
m_receiveThread.swap(receive_thread);
|
||||
thread handleCons(&TcpConnectionHandler::HandleConnectionsThreaded, this);
|
||||
m_receiveThread.swap(handleCons);
|
||||
}
|
||||
|
||||
void TcpConnectionHandler::Stop()
|
||||
@ -100,6 +102,7 @@ namespace std::net
|
||||
void TcpConnectionHandler::SetMaxConnections(uint32_t max_connections)
|
||||
{
|
||||
m_maxConnections = max_connections;
|
||||
m_pollFds.reserve(m_maxConnections);
|
||||
}
|
||||
|
||||
void TcpConnectionHandler::HandlePluginMessage(const NetworkMessage& message)
|
||||
@ -107,7 +110,7 @@ namespace std::net
|
||||
m_pluginManager->HandleMessage(message);
|
||||
}
|
||||
|
||||
void TcpConnectionHandler::HandleReceiveMsgAndConns()
|
||||
void TcpConnectionHandler::HandleConnections()
|
||||
{
|
||||
int res = poll(m_pollFds.data(), m_pollFds.size(), -1);
|
||||
|
||||
@ -259,9 +262,9 @@ namespace std::net
|
||||
HandlePluginMessage(msg);
|
||||
}
|
||||
|
||||
void TcpConnectionHandler::HandleReceiveMsgAndConnsThreaded()
|
||||
void TcpConnectionHandler::HandleConnectionsThreaded()
|
||||
{
|
||||
while (m_run.load())
|
||||
HandleReceiveMsgAndConns();
|
||||
HandleConnections();
|
||||
}
|
||||
}
|
||||
@ -13,7 +13,7 @@ class Plugin : public std::net::Plugin
|
||||
{
|
||||
virtual void HandleMessage(const std::net::NetworkMessage& message) override
|
||||
{
|
||||
|
||||
std::cout << "asd" << std::endl;
|
||||
}
|
||||
};
|
||||
|
||||
@ -27,8 +27,15 @@ int main()
|
||||
std::net::TcpConnection con;
|
||||
con.Connect(std::net::IPAddress("127.0.0.1"));
|
||||
|
||||
while (true)
|
||||
bool sent = false;
|
||||
|
||||
while (con) // 8% of my cpu
|
||||
{
|
||||
con.ReceiveData();
|
||||
if (!sent)
|
||||
{
|
||||
sent = true;
|
||||
con.SendMessage(std::net::DistributionMode::Server, 0, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -43,9 +43,11 @@ namespace std::net
|
||||
int32_t sent;
|
||||
secure ? secure_socket->Recv((byte*)string.c_str(), string.size(), sent) : socket->Send((byte*)string.c_str(), string.size(), sent);
|
||||
|
||||
vector<char> buffer(16384); // 16 KiB
|
||||
stringstream ss;
|
||||
// redo
|
||||
|
||||
byte* buffer[16384]; // 16 KiB
|
||||
stringstream ss;
|
||||
/*
|
||||
int32_t read;
|
||||
do
|
||||
{
|
||||
@ -54,7 +56,7 @@ namespace std::net
|
||||
}
|
||||
while (read > 0);
|
||||
secure ? secure_socket->Close() : socket->Close();
|
||||
|
||||
*/
|
||||
return Response(ss.str());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user