]> git.localhorst.tv Git - blank.git/blob - src/net/ConnectionHandler.hpp
942826b4329349a9b58f8bd1dad2cccf93ed17be
[blank.git] / src / net / ConnectionHandler.hpp
1 #ifndef BLANK_NET_CONNECTIONHANDLER_HPP_
2 #define BLANK_NET_CONNECTIONHANDLER_HPP_
3
4 #include "Packet.hpp"
5
6 #include <SDL_net.h>
7
8
9 namespace blank {
10
11 class ConnectionHandler {
12
13 public:
14         ConnectionHandler();
15
16         float PacketLoss() const noexcept { return packet_loss; }
17
18         void PacketLost(std::uint16_t);
19         void PacketReceived(std::uint16_t);
20
21         void Handle(const UDPpacket &);
22
23         virtual void OnTimeout() { }
24
25 private:
26         void UpdatePacketLoss() noexcept;
27
28         // called as soon as the remote end ack'd given packet
29         virtual void OnPacketReceived(std::uint16_t) { }
30         // called if the remote end probably didn't get given packet
31         virtual void OnPacketLost(std::uint16_t) { }
32
33         virtual void On(const Packet::Ping &) { }
34         virtual void On(const Packet::Login &) { }
35         virtual void On(const Packet::Join &) { }
36         virtual void On(const Packet::Part &) { }
37         virtual void On(const Packet::PlayerUpdate &) { }
38         virtual void On(const Packet::SpawnEntity &) { }
39         virtual void On(const Packet::DespawnEntity &) { }
40         virtual void On(const Packet::EntityUpdate &) { }
41         virtual void On(const Packet::PlayerCorrection &) { }
42         virtual void On(const Packet::ChunkBegin &) { }
43         virtual void On(const Packet::ChunkData &) { }
44
45 private:
46         unsigned int packets_lost;
47         unsigned int packets_received;
48         float packet_loss;
49
50 };
51
52 }
53
54 #endif