24 TCPConnection(boost::asio::io_context& ctx);
25 ~TCPConnection()
override;
32 void async_send(
const std::vector<uint8_t>& data)
override;
35 std::function<
void(std::vector<uint8_t>)> handler)
override {
36 on_frame_ = std::move(handler);
39 void set_on_disconnect(
40 std::function<
void(
const std::string&)> handler)
override {
41 on_disconnect_ = std::move(handler);
45 void start_read_header();
46 void start_read_body(uint32_t length);
49 void handle_disconnect(
const std::string& reason);
50 void handle_disconnect(
const std::error_code& reason);
52 std::unique_ptr<Web::CMFetcher> fetcher_;
54 std::array<uint8_t, 8> header_buffer_;
55 std::vector<uint8_t> body_buffer_;
56 std::deque<std::vector<uint8_t>> write_queue_;
58 ConnectionState state_ = ConnectionState::DISCONNECTED;
60 const std::array<uint8_t, 4> MAGIC = {
'V',
'T',
'0',
'1'};
62 boost::asio::io_context& ctx;
63 boost::asio::ip::tcp::socket socket_;
64 std::function<void(
const std::vector<uint8_t>&)> wait_for_callback;
65 std::function<void(std::vector<uint8_t>)> on_frame_;
66 std::function<void(
const std::string&)> on_disconnect_;