Files
codam-webserver-team/include/net/Connection.hpp
T
2026-09-13 13:13:33 +02:00

60 lines
1.9 KiB
C++

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* Connection.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: acossari <acossari@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2026/08/28 09:21:04 by acossari #+# #+# */
/* Updated: 2026/08/29 18:07:36 by acossari ### ########.fr */
/* */
/* ************************************************************************** */
#pragma once
#include <cstddef>
#include <cstdint>
#include "net/ByteBuffer.hpp"
#include "net/FileDescriptor.hpp"
namespace webserv {
class Connection final {
public:
enum class Lifecycle { Alive, Done, Fatal };
struct Outcome {
Lifecycle lifecycle;
std::uint32_t desiredEvents;
};
static constexpr std::size_t LOW_WATERMARK = 16uz * 1024;
explicit Connection(FileDescriptor socket);
Connection(const Connection&) = delete;
Connection& operator=(const Connection&) = delete;
Connection(Connection&&) = delete;
Connection& operator=(Connection&&) = delete;
int fd() const noexcept { return socket_.get(); }
Outcome onClientEvent(std::uint32_t events);
std::uint32_t desiredEvents() noexcept;
void close() noexcept { socket_.reset(); }
private:
bool receive();
bool transmit();
void forwardReceivedBytes();
FileDescriptor socket_;
ByteBuffer receiveBuffer_;
ByteBuffer sendBuffer_;
bool readClosed_ = false;
};
} // namespace webserv