feat(gameplay): add task ID to chunk requests to discard stale responses

This commit is contained in:
2026-06-27 14:05:49 +08:00
parent 65429b22d6
commit 1d4aa48230
9 changed files with 58 additions and 16 deletions

View File

@@ -52,6 +52,7 @@ public:
void receive_player_logout(const LogoutRsp& rsp);
int rendering_distance() const;
void rendering_distance(int rendering_distance);
int get_chunk_task_id() const;
void start_client_thread(std::string_view uuid);
void stop_client_thread();
@@ -108,6 +109,7 @@ private:
std::atomic<TickType> m_day_tick{6000};
std::atomic<bool> m_requesting_chunk{false};
std::atomic<bool> m_is_rebuilding{false};
std::atomic<int> m_chunk_task_id{0};
std::shared_ptr<NetworkClient> m_client;
ChunkLoadStyle m_chunk_load_style{ChunkLoadStyle::CENTER};

View File

@@ -22,6 +22,8 @@ public:
void update_pos(float x, float y, float z);
void update_sync_gametick(TickType gametick);
bool is_disconnect(TickType current_gametick) const;
int task_id() const;
void task_id(int id);
private:
static constexpr TickType TIMEOUT = 200;
@@ -32,5 +34,6 @@ private:
ChunkPos m_last_chunk_pos{0, 0};
std::shared_ptr<Session> m_session;
std::atomic<TickType> m_last_gametick{0};
std::atomic<int> m_chunk_task_id{0};
};
} // namespace Cubed

View File

@@ -72,7 +72,7 @@ public:
std::shared_ptr<Session> session);
glm::vec3 get_player_pos(const std::string& uuid) const;
void handle_chunk_req(const std::string& uuid, ChunkPos pos);
void handle_chunk_req(int task_id, const std::string& uuid, ChunkPos pos);
void handle_block_change(const BlockChangeReq& req);
template <typename Fn>
void register_timer(std::string_view id, TickType threshold, Fn&& f) {