Webserv
Loading...
Searching...
No Matches
Reactor.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "AEventHandler.hpp"
4#include "http/Router.hpp"
6#include <sys/types.h>
7#include <vector>
8
9namespace network {
10
13
22class Reactor : public AEventHandler {
23public:
24 Reactor(int clientFd, int port, http::Router const &);
25 ~Reactor();
26
27 virtual void handleEvent(uint32_t events);
28 virtual int getHandle() const;
29
30private:
31 Reactor(const Reactor &);
33
34 // --- Core Connection State ---
36 int port_;
39
40 // --- Request State ---
42 std::string requestBuffer_;
43 size_t bodyStart_;
45
46 // --- Response State ---
47 std::vector<char> responseBuffer_;
50
51 // --- Constants ---
52 static const size_t IO_BUFFER_SIZE = 8192;
53
54 // --- Private Methods ---
56 void handleRead();
58 void handleWrite();
60 void tryParseHeaders();
62 void generateResponse();
64 bool sendResponseBuffer();
68 void resetForNewRequest();
70 void closeConnection();
71};
72
73} // namespace network
A data container for an HTTP response.
Definition HttpResponse.hpp:34
The central request dispatcher.
Definition Router.hpp:18
AEventHandler()
Definition AEventHandler.cpp:5
Reactor(int clientFd, int port, http::Router const &)
Definition Reactor.cpp:21
size_t bodyStart_
Start position of the body in requestBuffer_.
Definition Reactor.hpp:43
int clientFd_
Definition Reactor.hpp:35
void tryParseHeaders()
Attempts to parse headers from the request buffer.
Definition Reactor.cpp:82
ResponseState responseState_
The current state of response sending.
Definition Reactor.hpp:48
std::string requestBuffer_
Buffer for incoming request data.
Definition Reactor.hpp:42
http::Router const & router_
Definition Reactor.hpp:37
virtual int getHandle() const
Definition Reactor.cpp:48
bool sendResponseBuffer()
Sends the contents of the response buffer.
Definition Reactor.cpp:160
virtual void handleEvent(uint32_t events)
Definition Reactor.cpp:39
size_t contentLength_
Expected length of the request body.
Definition Reactor.hpp:44
void handleWrite()
Handles outgoing data on the socket.
Definition Reactor.cpp:118
void closeConnection()
Closes the connection and removes it from the dispatcher.
Definition Reactor.cpp:34
void generateResponse()
Processes a fully parsed request to generate a response.
Definition Reactor.cpp:100
~Reactor()
Definition Reactor.cpp:27
void resetForNewRequest()
Resets the reactor state for a new request (keep-alive).
Definition Reactor.cpp:186
int port_
Definition Reactor.hpp:36
size_t sentResponseBytes_
Number of bytes sent from responseBuffer_.
Definition Reactor.hpp:49
std::vector< char > responseBuffer_
Buffer for the outgoing response.
Definition Reactor.hpp:47
http::HttpResponse response_
The HTTP response being prepared/sent.
Definition Reactor.hpp:38
void handleRead()
Handles incoming data on the socket.
Definition Reactor.cpp:52
Reactor(const Reactor &)
static const size_t IO_BUFFER_SIZE
Size for read/write chunks.
Definition Reactor.hpp:52
RequestState requestState_
The current state of request parsing.
Definition Reactor.hpp:41
Reactor & operator=(const Reactor &)
void clearResponseBuffer()
Clears the response buffer and resets sent byte count.
Definition Reactor.cpp:181
Definition Acceptor.hpp:8
RequestState
Definition Reactor.hpp:11
@ REQUEST_READY
Definition Reactor.hpp:11
@ READING_HEADERS
Definition Reactor.hpp:11
@ READING_BODY
Definition Reactor.hpp:11
ResponseState
Definition Reactor.hpp:12
@ NOT_READY
Definition Reactor.hpp:12
@ SENT
Definition Reactor.hpp:12
@ SENDING
Definition Reactor.hpp:12