X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fnet%2FConnection.hpp;h=ed7a946aab01d2296123f9f68229d46a2b9b4b48;hb=ae5a7e7d8517fac406a88e9bf98fd3d5bb1728b9;hp=ade65ebd4d955939ead5a4840409c5d5bbb5db58;hpb=09b734344f31e18d0fa31c39acba6d012aa2cc56;p=blank.git diff --git a/src/net/Connection.hpp b/src/net/Connection.hpp index ade65eb..ed7a946 100644 --- a/src/net/Connection.hpp +++ b/src/net/Connection.hpp @@ -10,11 +10,18 @@ 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; @@ -22,11 +29,14 @@ public: bool ShouldPing() const noexcept; bool TimedOut() const noexcept; + void Close() noexcept { closed = true; } + bool Closed() const noexcept { return closed; } + void Update(int dt); - void SendPing(UDPpacket &, UDPsocket); + std::uint16_t SendPing(UDPpacket &, UDPsocket); - void Send(UDPpacket &, UDPsocket); + std::uint16_t Send(UDPpacket &, UDPsocket); void Received(const UDPpacket &); private: @@ -34,11 +44,15 @@ private: void FlagRecv() noexcept; private: + ConnectionHandler *handler; IPaddress addr; IntervalTimer send_timer; IntervalTimer recv_timer; - Packet::TControl ctrl; + Packet::TControl ctrl_out; + Packet::TControl ctrl_in; + + bool closed; };