Files
VoidNet/include/VoidNet_HL/TcpConnection.hpp
TheDoctor 5f13265c5d Update
NetworkMessage->GetData fixed
Plugin -> Splitted message types
PluginManager is now thread safe
TcpConnection added list of events
Properly handling disconnection now
Fixed bug in Socket with error translation
It crashes when it exits, i think it has something to do with shared ptrs or something
2019-10-21 00:27:21 +01:00

75 lines
1.6 KiB
C++

#pragma once
#include <functional>
#include "VoidNet_LL/TcpClient.hpp"
#include "VoidNet_HL/NetworkMessage.hpp"
namespace std::net
{
class TcpConnection
{
public:
friend class TcpConnectionHandler;
TcpConnection();
TcpConnection(TcpClient *client);
shared_ptr<TcpClient> GetClient();
uint32_t GetID();
bool Connect(IPAddress addr);
bool Disconnect();
template<typename T>
bool SendMessage(DistributionMode mode, uint32_t destinationId, uint32_t tag, void *data)
{
NetworkMessage msg(m_id, mode, destinationId, tag, data, sizeof(T));
return sendMessage(msg);
}
bool SendMessage(DistributionMode mode, uint32_t destinationId, uint32_t tag)
{
NetworkMessage msg(m_id, mode, destinationId, tag, nullptr, 0);
return sendMessage(msg);
}
void ReceiveData();
bool IsConnected;
private:
bool sendMessage(const NetworkMessage &msg);
shared_ptr<TcpClient> m_client;
uint32_t m_id;
vector<function<void(uint32_t, DistributionMode, uint32_t, uint32_t, void*)>> m_onDataReceived;
vector<function<void(string)>> m_onDisconnect;
vector<function<void(uint32_t, void*)>> m_onNewConnection;
vector<function<void()>> m_onConnection;
public:
void operator+=(const function<void(uint32_t, DistributionMode, uint32_t, uint32_t, void*)> &rhs)
{
m_onDataReceived.push_back(rhs);
}
void operator+=(const function<void(string)>& rhs)
{
m_onDisconnect.push_back(rhs);
}
void operator+=(const function<void(uint32_t, void*)> & rhs)
{
m_onNewConnection.push_back(rhs);
}
void operator+=(const function<void()>& rhs)
{
m_onConnection.push_back(rhs);
}
};
}