X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fnet%2FConnection.hpp;h=bb0d791a9c5ce898eca36b35d297ec937a3b7510;hb=b4e5dad2ed5c7e77573de413f3bf5be88577856d;hp=49e9cdac3989eee5bd7b74969bd193502c3b3abc;hpb=9ebe2c320fd9f94266ab93fa2f9d9908a0a284d3;p=blank.git diff --git a/src/net/Connection.hpp b/src/net/Connection.hpp index 49e9cda..bb0d791 100644 --- a/src/net/Connection.hpp +++ b/src/net/Connection.hpp @@ -1,39 +1,58 @@ #ifndef BLANK_NET_CONNECTION_HPP_ #define BLANK_NET_CONNECTION_HPP_ +#include "Packet.hpp" #include "../app/IntervalTimer.hpp" +#include #include namespace blank { +class ConnectionHandler; + class Connection { public: explicit Connection(const IPaddress &); + void SetHandler(ConnectionHandler *h) noexcept { handler = h; } + void RemoveHandler() noexcept { handler = nullptr; } + bool HasHandler() const noexcept { return handler; } + ConnectionHandler &Handler() noexcept { return *handler; } + const IPaddress &Address() const noexcept { return addr; } bool Matches(const IPaddress &) const noexcept; - void FlagSend() noexcept; - void FlagRecv() noexcept; - bool ShouldPing() const noexcept; bool TimedOut() const noexcept; + void Close() noexcept { closed = true; } + bool Closed() const noexcept { return closed; } + void Update(int dt); + std::uint16_t SendPing(UDPpacket &, UDPsocket); - void SendPing(UDPpacket &, UDPsocket); + std::uint16_t Send(UDPpacket &, UDPsocket); + void Received(const UDPpacket &); - void Send(UDPpacket &, UDPsocket); +private: + void FlagSend() noexcept; + void FlagRecv() noexcept; private: + ConnectionHandler *handler; IPaddress addr; - IntervalTimer send_timer; - IntervalTimer recv_timer; + CoarseTimer send_timer; + CoarseTimer recv_timer; + + Packet::TControl ctrl_out; + Packet::TControl ctrl_in; + + bool closed; };