feat: refactor for consistency, some additions

This commit is contained in:
3lswear
2022-02-05 01:53:42 +03:00
parent 509cd51ffd
commit 282224fd12
2 changed files with 75 additions and 38 deletions

View File

@@ -21,6 +21,18 @@ Server::Server(std::string path)
_client = 0;
}
void Server::print_epoll_events(unsigned int events)
{
DBOUT << "Epoll events: ";
if (events & EPOLLIN)
DBOUT << "EPOLLIN ";
if (events & EPOLLOUT)
DBOUT << "EPOLLOUT ";
if (events & EPOLLET)
DBOUT << "EPOLLET ";
DBOUT << ENDL;
}
//----------------------------------------------Send--------------------------------------------------------------------------------------------
//----------------------------------------------Configuration-----------------------------------------------------------------------------------
@@ -67,7 +79,7 @@ void Server::sendData(Client &client, int fd)
}
void Server::readSocket(int fd, std::map<int, Client> &client_map)
void Server::readSocket(Client &client, int fd)
{
int status;
@@ -78,22 +90,22 @@ void Server::readSocket(int fd, std::map<int, Client> &client_map)
bytes_read = recv(fd, buf, BUFFSIZE, 0);
if (bytes_read == 0)
{
client_map[fd].allRead = true;
client.allRead = true;
return;
}
client_map[fd].setRawData(buf);
client_map[fd].increaseRecvCounter(bytes_read);
status = client_map[fd].parseRequest();
client.setRawData(buf);
client.increaseRecvCounter(bytes_read);
status = client.parseRequest();
// client_map[fd].printClientInfo();
if ((bytes_read < BUFFSIZE) && client_map[fd].allRecved())
if ((bytes_read < BUFFSIZE) && client.allRecved())
{
client_map[fd].allRead = true;
client.allRead = true;
}
std::cerr << "recvCounter " << client_map[fd].getRecvCounter() << std::endl;
std::cerr << "contentLength " << client_map[fd].getRequest().getContentLength() << std::endl;
std::cerr << "allRead " << client_map[fd].allRead << std::endl;
std::cerr << "recvCounter " << client.getRecvCounter() << std::endl;
std::cerr << "contentLength " << client.getRequest().getContentLength() << std::endl;
std::cerr << "allRead " << client.allRead << std::endl;
std::cout << BLUE << "status is " << Response::getReasonPhrase(status) << RESET << std::endl;
bzero(buf, BUFFSIZE);
@@ -156,7 +168,7 @@ void Server::start(void)
if (!client.allRead && !client.isEmpty())
{
readSocket(client_it->first, client_map);
readSocket(client, fd);
}
if (client.readyToSend())
{
@@ -170,7 +182,8 @@ void Server::start(void)
if ((client.readyToSend() && client.allSended()) || client.isEmpty())
{
client_map[fd].printClientInfo();
/* SUS */
/* client_map[fd].printClientInfo(); */
close(client_it->first);
std::cerr << RED <<
"deleting client "
@@ -191,6 +204,9 @@ void Server::start(void)
{
fd = _events[i].data.fd;
DBOUT << "FD is " << fd << ENDL;
print_epoll_events(_events[i].events);
if (fd == server_sock.getSocketFd())
{
int client_sock = accept(server_sock.getSocketFd(),
@@ -204,7 +220,8 @@ void Server::start(void)
{
std::cout << TURQ << "IN FOR LOOP" << RESET << std::endl;
/* _client--; */
readSocket(fd, client_map);
client_map[fd];
readSocket(client_map[fd], fd);
}
}
ready_num = 0;

View File

@@ -7,37 +7,57 @@
#include "Socket.hpp"
#include "parse.hpp"
class Client;
class Server
{
private:
int _port;
int _epoll_fd;
int _client;
struct epoll_event _events[MAX_CLIENT];
struct sockaddr_in _addres;
std::string _ip;
std::vector<ServerConfig *> _configs;
void add_to_epoll_list(int fd, unsigned int ep_events);
private:
int _port;
int _epoll_fd;
int _client;
struct epoll_event _events[MAX_CLIENT];
struct sockaddr_in _addres;
std::string _ip;
std::vector<ServerConfig *> _configs;
void add_to_epoll_list(int fd, unsigned int ep_events);
private:
void checkError(int fd, std::string str);
void sendFile(std::string str);
void sendClient(Client head, int);
void sendResponse(Client head, int);
void setNonBlock(int fd);
void sendData(Client &client, int fd);
void readSocket(int fd, std::map<int, Client> &client_map);
public:
Server();
Server(std::string path);
static void print_epoll_events(unsigned int events);
void readConfig(void);
void setupConfig(void);
void start(void);
void end(void);
~Server();
private:
void checkError(int fd, std::string str);
void sendFile(std::string str);
void sendClient(Client head, int);
void sendResponse(Client head, int);
void setNonBlock(int fd);
void sendData(Client &client, int fd);
void readSocket(Client &client, int fd);
enum e_req_status
{
READING,
WRITING,
ENDED
};
typedef struct s_client_status
{
int fd;
int serverfd;
size_t readn;
size_t left;
enum e_req_status req_status;
} t_client_status;
public:
Server();
Server(std::string path);
void readConfig(void);
void setupConfig(void);
void start(void);
void end(void);
~Server();
};