this repo has no description
1#pragma once
2// Project Includes
3#include "file_descriptor.hpp"
4#include "http.hpp"
5#include "server.hpp"
6#include "uring_context.hpp"
7// Standard Library Includes
8#include <cassert>
9#include <cstddef>
10#include <vector>
11// Third-Party Library Includes
12#include <exec/repeat_effect_until.hpp>
13#include <exec/static_thread_pool.hpp>
14#include <exec/task.hpp>
15
16struct Client
17{
18 FileDescriptor m_fd;
19 UringContext &m_uring_ctx;
20 std::vector<std::byte> m_buffer;
21 RequestList m_completed_requests;
22 HttpRequestParser m_parser;
23 bool m_disconnect_requested;
24
25 Client() = delete;
26
27 Client(FileDescriptor fd, UringContext &uring_ctx)
28 : m_fd(std::move(fd)), m_uring_ctx(uring_ctx), m_buffer(std::vector<std::byte>(4096)),
29 m_disconnect_requested(false)
30 {
31 }
32};
33
34/**
35 * @brief Asynchronously handles a client connection.
36 *
37 * @param client_fd
38 * @param ctx
39 * @param uring_ctx
40 * @return kev::task<void>
41 */
42kev::task<void> handle_connection_coroutine(FileDescriptor client_fd, ServerContext &ctx, UringContext &uring_ctx);