에코 서버 객체화 하기

☝🏻 멤버 변수 default 는 private



1. ServerSocket Class - 서버 소켓 관리자

☝🏻 소켓 생성(socket) + 소켓과 IP 연결(address struct, bind, listen)

1-1. 멤버 변수

#include <arpa/inet.h>
#include <sys/socket.h>

int                        server_socket
struct sockaddr_in         server_addr

1-2. 멤버 함수

void    safeSocket(int domain, int type, int protocol);
void    safeListen(int backlog);
void    safeBind(void);
int     safeAccept(void);

void    setNonBlock(int socket_fd);
int     getServerSocket(void);

1-3. 생성자

ServerSocket(sa_family_t address_family, int port);



2. Server Class - 서버 관리자

2-1. 멤버 변수

private:
    std::map<int, std::string>  clients
    int                         kq
    std::vector<struct kevent>  change_list
    struct kevent               event_list[8]

    ServerSocket                *server_socket;

2-2. 멤버 함수

public:
    int     kqueue(void);

    // 내부에서 EV_SET 및 change_list 에 kevent 를 push_back 함
    void    setChangeList(std::vector<struct kevent> &change_list, 
                            uintptr_t                ident,
                            int16_t                  filter,
                            uint16_t                 flags,
                            uint32_t                 fflags,
                            intptr_t                 data,
                            void                     *udata);

    void    run(void);
    void    disconnectClient(int client_fd, std::map<int, std::string> &clients);

    int safeKevent(int nevents, const timespec *timeout);
    int safeRecv(int fd, char *buf);
    int safeSend(int fd);

2-3. 생성자

Server(ServerSocket &server_socket);



3. Request Class - 요청자

3-1. 멤버 변수

#define POST 0
#define GET 1
#define DELETE 2

private:
    std::string                         raw_msg;

    bool                                 head_done;
    std::string                          method;
    std::string                          url;
    std::string                          version;
    std::map<std::string, std::string>   header;
    std::vector<std::string>             entity;

3-2. 멤버 함수

public:
    // setMethod();
    // setUrl();
    // setHeader();
    // setEntity();

    void        setRawMsg(const std::string &);
    std::string getRawMsg();
    void        clearSetRawMsg();
    void        parserHead();
    void        toString();

3-3. 생성자

Request();



4. Response Class - 응답자

4-1. 멤버 변수

#define POST 0
#define GET 1
#define DELETE 2

private:

4-2. 멤버 함수

public:

4-3. 생성자

Response();