]> git.localhorst.tv Git - blank.git/blobdiff - src/net/Connection.hpp
light entities according to block light level
[blank.git] / src / net / Connection.hpp
index 49e9cdac3989eee5bd7b74969bd193502c3b3abc..bb0d791a9c5ce898eca36b35d297ec937a3b7510 100644 (file)
@@ -1,39 +1,58 @@
 #ifndef BLANK_NET_CONNECTION_HPP_
 #define BLANK_NET_CONNECTION_HPP_
 
+#include "Packet.hpp"
 #include "../app/IntervalTimer.hpp"
 
+#include <cstdint>
 #include <SDL_net.h>
 
 
 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;
 
 };