#ifndef WEBSOCKET_H #define WEBSOCKET_H #include #include #include #include #include "transport.h" class WebSocket { public: WebSocket(Transport *transport); ~WebSocket(); void SetHeader(const char* key, const char* value); void SetReceiveBufferSize(size_t size); bool IsConnected() const; bool Connect(const char* uri); bool Send(const std::string& data); bool Send(const void* data, size_t len, bool binary = false, bool fin = true); void Ping(); void Close(); void OnConnected(std::function callback); void OnDisconnected(std::function callback); void OnData(std::function callback); void OnError(std::function callback); private: Transport *transport_; std::thread receive_thread_; bool continuation_ = false; size_t receive_buffer_size_ = 2048; std::map headers_; std::function on_data_; std::function on_error_; std::function on_connected_; std::function on_disconnected_; void ReceiveTask(); bool SendAllRaw(const void* data, size_t len); bool SendControlFrame(uint8_t opcode, const void* data, size_t len); }; #endif // WEBSOCKET_H