X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fnet%2FClientConnection.hpp;h=075fdcec190655e3aff8534b40a359c36db8e70e;hb=ae5a7e7d8517fac406a88e9bf98fd3d5bb1728b9;hp=fb6420acfed074959df27449741d3cb80cb5526c;hpb=51a0b19601cb4b044c7eee1782aa85fc3a399d33;p=blank.git diff --git a/src/net/ClientConnection.hpp b/src/net/ClientConnection.hpp index fb6420a..075fdce 100644 --- a/src/net/ClientConnection.hpp +++ b/src/net/ClientConnection.hpp @@ -1,16 +1,21 @@ #ifndef BLANK_NET_CLIENTCONNECTION_HPP_ #define BLANK_NET_CLIENTCONNECTION_HPP_ +#include "ChunkTransmitter.hpp" #include "Connection.hpp" #include "ConnectionHandler.hpp" +#include "Server.hpp" +#include "../app/IntervalTimer.hpp" +#include "../world/EntityState.hpp" +#include "../world/Player.hpp" +#include #include #include namespace blank { -class Entity; class Server; class ClientConnection @@ -27,11 +32,23 @@ public: Connection &GetConnection() noexcept { return conn; } bool Disconnected() const noexcept { return conn.Closed(); } - void AttachPlayer(Entity &); + /// prepare a packet of given type + template + Type Prepare() const noexcept { + return Packet::Make(server.GetPacket()); + } + /// send the previously prepared packet + std::uint16_t Send(); + /// send the previously prepared packet of non-default length + std::uint16_t Send(std::size_t len); + + void AttachPlayer(const Player &); void DetachPlayer(); - bool HasPlayer() const noexcept { return player; } - Entity &Player() noexcept { return *player; } - const Entity &Player() const noexcept { return *player; } + bool HasPlayer() const noexcept { return player.entity; } + Entity &PlayerEntity() noexcept { return *player.entity; } + const Entity &PlayerEntity() const noexcept { return *player.entity; } + ChunkIndex &PlayerChunks() noexcept { return *player.chunks; } + const ChunkIndex &PlayerChunks() const noexcept { return *player.chunks; } private: struct SpawnStatus { @@ -61,13 +78,25 @@ private: void SendDespawn(SpawnStatus &); void SendUpdate(SpawnStatus &); + void CheckPlayerFix(); + + void CheckChunkQueue(); + private: Server &server; Connection conn; - Entity *player; + Player player; std::list spawns; unsigned int confirm_wait; + EntityState player_update_state; + std::uint16_t player_update_pack; + IntervalTimer player_update_timer; + + ChunkTransmitter transmitter; + std::deque chunk_queue; + glm::ivec3 old_base; + }; }