X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fnet%2FConnectionHandler.hpp;h=77bcd7b4da179d8ab52f2c697e7eae2f4da6820f;hb=ca90ec459ca0bd48c1483a45f30496aed61e9c21;hp=3eb8f55d1e09e6c6550f6bcb5e4902692767b8f0;hpb=37e056bafe9603981d6bcb205e1472e063c94700;p=blank.git diff --git a/src/net/ConnectionHandler.hpp b/src/net/ConnectionHandler.hpp index 3eb8f55..77bcd7b 100644 --- a/src/net/ConnectionHandler.hpp +++ b/src/net/ConnectionHandler.hpp @@ -11,17 +11,43 @@ namespace blank { class ConnectionHandler { public: - void Handle(const UDPpacket &); + ConnectionHandler(); - virtual void OnPacketLost(std::uint16_t) { } + float PacketLoss() const noexcept { return packet_loss; } + + void PacketLost(std::uint16_t); + void PacketReceived(std::uint16_t); + + void Handle(const UDPpacket &); virtual void OnTimeout() { } private: + void UpdatePacketLoss() 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 OnPacketLost(std::uint16_t) { } + virtual void On(const Packet::Ping &) { } virtual void On(const Packet::Login &) { } virtual void On(const Packet::Join &) { } virtual void On(const Packet::Part &) { } + virtual void On(const Packet::PlayerUpdate &) { } + virtual void On(const Packet::SpawnEntity &) { } + virtual void On(const Packet::DespawnEntity &) { } + virtual void On(const Packet::EntityUpdate &) { } + virtual void On(const Packet::PlayerCorrection &) { } + virtual void On(const Packet::ChunkBegin &) { } + virtual void On(const Packet::ChunkData &) { } + virtual void On(const Packet::BlockUpdate &) { } + virtual void On(const Packet::Message &) { } + +private: + unsigned int packets_lost; + unsigned int packets_received; + float packet_loss; };