this repo has no description
at main 42 lines 1.1 kB view raw
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);