#pragma once #ifdef NETWORK #include "WebSocketClientBase.h" #include #include #include #include #include namespace ZL { class WebSocketClient : public WebSocketClientBase { private: // Переиспользуем io_context из TaskManager boost::asio::io_context& ioc_; // Объекты переехали в члены класса std::unique_ptr> ws_; boost::beast::flat_buffer buffer_; std::queue messageQueue; std::mutex queueMutex; // Защита для messageQueue std::queue> writeQueue_; bool isWriting_ = false; std::mutex writeMutex_; // Отдельный мьютекс для очереди записи bool connected = false; void startAsyncRead(); void processIncomingMessage(const std::string& msg); public: explicit WebSocketClient(boost::asio::io_context& ioc) : ioc_(ioc) {} void Connect(const std::string& host, uint16_t port) override; void Poll() override; void Send(const std::string& message) override; void doWrite(); bool IsConnected() const override { return connected; } }; } #endif