#pragma once #include #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 GetClient(); uint32_t GetID(); bool Connect(IPAddress addr); bool Disconnect(); template 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 m_client; uint32_t m_id; vector> m_onDataReceived; vector> m_onDisconnect; vector> m_onNewConnection; vector> m_onConnection; public: void operator+=(const function &rhs) { m_onDataReceived.push_back(rhs); } void operator+=(const function& rhs) { m_onDisconnect.push_back(rhs); } void operator+=(const function & rhs) { m_onNewConnection.push_back(rhs); } void operator+=(const function& rhs) { m_onConnection.push_back(rhs); } }; }