#ifndef BLANK_NET_CONNECTIONHANDLER_HPP_
#define BLANK_NET_CONNECTIONHANDLER_HPP_
+#include "CongestionControl.hpp"
#include "Packet.hpp"
#include <SDL_net.h>
public:
ConnectionHandler();
- /// packet loss as factor
- float PacketLoss() const noexcept { return packet_loss; }
- /// smooth average round trip time in milliseconds
- float RoundTripTime() const noexcept { return rtt; }
- /// estimated kilobytes transferred per second
- float Upstream() const noexcept { return tx_kbps; }
- /// estimated kilobytes received per second
- float Downstream() const noexcept { return rx_kbps; }
+ const CongestionControl &NetStat() const noexcept { return cc; }
void PacketSent(std::uint16_t) noexcept;
void PacketLost(std::uint16_t);
virtual void OnTimeout() { }
private:
- void UpdatePacketLoss() noexcept;
- void UpdateRTT(std::uint16_t) noexcept;
- bool SamplePacket(std::uint16_t) const noexcept;
- int HeadDiff(std::uint16_t) const noexcept;
- void UpdateStats() noexcept;
-
// called as soon as the remote end ack'd given packet
virtual void OnPacketReceived(std::uint16_t) { }
// called if the remote end probably didn't get given packet
virtual void On(const Packet::Message &) { }
private:
- unsigned int packets_lost;
- unsigned int packets_received;
- float packet_loss;
-
- Uint32 stamps[16];
- std::size_t stamp_cursor;
- std::uint16_t stamp_last;
- float rtt;
-
- Uint32 next_sample;
- std::size_t tx_bytes;
- std::size_t rx_bytes;
- float tx_kbps;
- float rx_kbps;
+ CongestionControl cc;
};