Skip to content

Commit

Permalink
Refact: start_server 를 start_servers, start_a_server 로 나눔
Browse files Browse the repository at this point in the history
  • Loading branch information
PennyBlack2008 committed May 3, 2021
1 parent f1aa6e4 commit bdcf0b7
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 51 deletions.
97 changes: 48 additions & 49 deletions srcs/Webserver/Webserver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,14 @@ Webserver::Webserver(int argc, char** argv, char** envp)
(void)envp;
}

void Webserver::start_server(void)
void Webserver::start_servers(void)
{
Servers &servers = this->mservers; // NOTE yunslee
servers.SetSockets(); // NOTE yunslee

int client_socket; // STUB : Accept 의 반환값을 받아 만들어지는 통신 소켓
char buffer[BUFFER_SIZE]; // STUB : 버퍼. 버퍼사이즈는 위에 define 되어 있음.
int bytesRead = BUFFER_SIZE - 1; // STUB : read 를 얼마나 했는 지 받는 변수. read 반복문에 들어가기 위해 초기화를 해준다.
int ret; // STUB : select 의 반환 값을 받아. -1: error, 0: timeout, 그외 성공.
int fd_max; // STUB : 가장 fd 번호가 늦는 서버 소켓을 저장. select 가 이 값을 참고해 서버 소켓의 변화를 확인한다.


/* TEST : 테스트 진행 */
bytesRead = BUFFER_SIZE - 1;

/* STUB 1. clear the socket set */
FD_ZERO(&readfds);

Expand Down Expand Up @@ -60,56 +53,62 @@ void Webserver::start_server(void)
std::cout << "Received connection\n";
}

/* STUB 4. FD_ISSET 서버 소켓 버퍼 감시 */
/* STUB 5. FD_ISSET 서버 소켓 버퍼 감시 */
for (size_t i = 0; i < servers.mservers.size(); i++) // NOTE yunslee port별로 ISSET 확인하기 위해서 반복문 씀
{
Server &server = servers.mservers[i];
if (FD_ISSET(server.msocket.GetFd(), &cpy_readfds))
{
client_socket = server.msocket.Accept();
if (client_socket == -1)
std::cerr << "Could not create socket." << std::endl;
else
{
bytesRead = BUFFER_SIZE - 1;
std::cout << "connected client fd: " << client_socket << std::endl;

// STUB : Read from the connection
while (bytesRead == BUFFER_SIZE - 1)
{
ft_memset(buffer, 0, BUFFER_SIZE); // REVIEW : 전체 탐색하는 것들은 성능 개선의 여지가 있음
bytesRead = read(client_socket, buffer, BUFFER_SIZE - 1); // request 를 여기서 받아서..
/***************************************************
* 영환이가 버퍼를 받아 코드에서 적용시키는 영역
***************************************************/
if (bytesRead == -1)
std::cerr << "Could not read request." << std::endl;
}
if (bytesRead != -1)
{
// STUB : HttpMessageRequest
HttpMessageRequest request(buffer);
request.Parser(); // request 를 parsing 한 후,

// STUB : HttpMessageResponse
HttpMessageResponse response(request); // reponse 를 정리한다.
response.SetMessage();

// STUB : Send a message to the connection
int len = response.GetMessage().size();
int ret = send(client_socket, response.GetMessage().c_str(), len, 0);
}
}
// STUB Close the connections
close(client_socket);
}
start_a_server(server, cpy_readfds);
}
}

// STUB : close all server socket
// STUB : close all server socket
for (size_t i = 0; i < servers.mservers.size(); i++) // NOTE yunslee 서버 소켓 다 닫아야함.
{
Server &server = servers.mservers[i];
close(server.msocket.GetFd());
}
}

void Webserver::start_a_server(Server& server, fd_set& cpy_readfds)
{
int client_socket; // STUB : Accept 의 반환값을 받아 만들어지는 통신 소켓
char buffer[BUFFER_SIZE]; // STUB : 버퍼. 버퍼사이즈는 위에 define 되어 있음.
int bytesRead; // STUB : read 를 얼마나 했는 지 받는 변수. read 반복문에 들어가기 위해 초기화를 해준다.

client_socket = server.msocket.Accept();
if (client_socket == -1)
std::cerr << "Could not create socket." << std::endl;
else
{
bytesRead = BUFFER_SIZE - 1;
std::cout << "connected client fd: " << client_socket << std::endl;

// STUB : Read from the connection
while (bytesRead == BUFFER_SIZE - 1)
{
ft_memset(buffer, 0, BUFFER_SIZE); // REVIEW : 전체 탐색하는 것들은 성능 개선의 여지가 있음
bytesRead = read(client_socket, buffer, BUFFER_SIZE - 1); // request 를 여기서 받아서..
/***************************************************
* 영환이가 버퍼를 받아 코드에서 적용시키는 영역
***************************************************/
if (bytesRead == -1)
std::cerr << "Could not read request." << std::endl;
}
if (bytesRead != -1)
{
// STUB : HttpMessageRequest
HttpMessageRequest request(buffer);
request.Parser(); // request 를 parsing 한 후,

// STUB : HttpMessageResponse
HttpMessageResponse response(request); // reponse 를 정리한다.
response.SetMessage();

// STUB : Send a message to the connection
int len = response.GetMessage().size();
int ret = send(client_socket, response.GetMessage().c_str(), len, 0);
}
}
// STUB Close the connections
close(client_socket);
}
3 changes: 2 additions & 1 deletion srcs/Webserver/Webserver.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ class Webserver

public:
Webserver(int argc, char** argv, char** envp);
void start_server(void); // 서버 시작
void start_servers(void); // 서버 시작
void start_a_server(Server& server, fd_set& cpy_readfds); // 서버 하나 시작
// Webserver(const Path&); // config 파일의 경로를 받아서 초기화
// void create_server(const std::vector<Config>& config_locations);

Expand Down
2 changes: 1 addition & 1 deletion srcs/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ int main(int argc, char** argv, char** env)


s.mservers = servers; // REVIEW public으로 값을 할당하는데, soft 할지 deep할지
s.start_server();
s.start_servers();
}
catch(const std::exception &e) {
std::cerr << e.what() << std::endl;
Expand Down

0 comments on commit bdcf0b7

Please sign in to comment.