#pragma once #include "NetworkInterface.h" #include #include namespace ZL { // All state in WebSocketClientBase is only accessed from the main thread: // HandlePollMessage() runs from Poll(), and get*() are called from Game/Space on the main thread. // No mutexes needed. class WebSocketClientBase : public INetworkClient { protected: std::unordered_map remotePlayers; std::vector> serverBoxes_; std::vector serverBoxesDestroyed_; std::vector pendingProjectiles_; std::vector pendingDeaths_; std::vector pendingRespawns_; std::vector pendingBoxDestructions_; std::vector pendingBoxPickups_; std::vector pendingBoxRespawns_; std::vector pendingDisconnects_; int clientId = -1; int64_t timeOffset = 0; std::vector pendingSpawns_; public: int GetClientId() const override { return clientId; } int64_t getTimeOffset() const override { return timeOffset; } void HandlePollMessage(const std::string& msg); std::string SignMessage(const std::string& msg); std::unordered_map getRemotePlayers() override { return remotePlayers; } std::vector> getServerBoxes() override { return serverBoxes_; } std::vector getServerBoxDestroyedFlags() override { return serverBoxesDestroyed_; } std::vector getPendingProjectiles() override; std::vector getPendingDeaths() override; std::vector getPendingRespawns() override; std::vector getPendingBoxDestructions() override; std::vector getPendingBoxPickups() override; std::vector getPendingBoxRespawns() override; std::vector getPendingDisconnects() override; std::vector getPendingSpawns(); int getClientId() const { return clientId; } }; }