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;
bool TimedOut() const noexcept;
void Close() noexcept { closed = true; }
- bool Closed() const noexcept { return closed || TimedOut(); }
+ 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:
void FlagRecv() noexcept;
private:
+ ConnectionHandler *handler;
IPaddress addr;
- IntervalTimer send_timer;
- IntervalTimer recv_timer;
+ CoarseTimer send_timer;
+ CoarseTimer recv_timer;
- Packet::TControl ctrl;
+ Packet::TControl ctrl_out;
+ Packet::TControl ctrl_in;
bool closed;