#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_; int clientId = -1; int64_t timeOffset = 0; 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() { return serverBoxesDestroyed_; } std::vector getPendingProjectiles() override; std::vector getPendingDeaths() override; std::vector getPendingRespawns() override; std::vector getPendingBoxDestructions() override; }; }