From 6cc00ecac42ce1134a52b04454dbfbd66fe25b40 Mon Sep 17 00:00:00 2001 From: kinou-p Date: Wed, 7 Dec 2022 17:37:27 +0100 Subject: [PATCH] split in separate files, no advencement --- Makefile | 8 +++-- includes/ft_irc.hpp | 28 +++++++++++++-- srcs/commands/parse_commands.cpp | 12 +++++++ srcs/epoll.cpp | 33 ++++++++++++++++++ srcs/main.cpp | 49 +-------------------------- srcs/server_loop.cpp | 42 +++++++++++++++++++++++ srcs/start_server.cpp | 58 ++++++++++++++++++++++++++++++++ srcs/utils.cpp | 30 +++++++++++++++++ 8 files changed, 207 insertions(+), 53 deletions(-) create mode 100644 srcs/commands/parse_commands.cpp create mode 100644 srcs/epoll.cpp create mode 100644 srcs/server_loop.cpp create mode 100644 srcs/start_server.cpp create mode 100644 srcs/utils.cpp diff --git a/Makefile b/Makefile index 2e8e984..a6aeaee 100644 --- a/Makefile +++ b/Makefile @@ -6,12 +6,16 @@ # By: apommier +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/12/01 17:27:29 by apommier #+# #+# # -# Updated: 2022/12/06 17:39:38 by apommier ### ########.fr # +# Updated: 2022/12/06 22:07:24 by apommier ### ########.fr # # # # **************************************************************************** # NAME = ircserv -SRCS := main.cpp +SRCS := main.cpp\ + epoll.cpp\ + start_server.cpp\ + utils.cpp\ + server_loop.cpp CC = c++ #FLAGS = -g -Wall -Wextra -Werror diff --git a/includes/ft_irc.hpp b/includes/ft_irc.hpp index f88717d..557c36a 100644 --- a/includes/ft_irc.hpp +++ b/includes/ft_irc.hpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/01 17:27:37 by apommier #+# #+# */ -/* Updated: 2022/12/06 19:13:04 by apommier ### ########.fr */ +/* Updated: 2022/12/06 22:06:07 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,6 +16,28 @@ #include #include //std::string #include //errno -#include //std::cout +#include //std::cout | cerr #include //struct socket -#include //epoll \ No newline at end of file +#include //epoll ensemble +#include //close() + +/* ************************************************************************** */ +/* *********************************UTILS************************************ */ +/* ************************************************************************** */ + +void ft_error(std::string str); +void close_fd(int fd); + +/* ************************************************************************** */ +/* ******************************START SERVER******************************** */ +/* ************************************************************************** */ + +void initialize(char **av); //1st +void start_loop(int epollFd, int oldSock, int newSock); //3rd + +/* ************************************************************************** */ +/* *****************************EPOLL UTILITY******************************** */ +/* ************************************************************************** */ + +void epoll_add(int epollFd, int fd); +int epoll_start(); //2nd \ No newline at end of file diff --git a/srcs/commands/parse_commands.cpp b/srcs/commands/parse_commands.cpp new file mode 100644 index 0000000..1f7f96d --- /dev/null +++ b/srcs/commands/parse_commands.cpp @@ -0,0 +1,12 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* parse_commands.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/12/06 22:01:25 by apommier #+# #+# */ +/* Updated: 2022/12/06 22:01:26 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + diff --git a/srcs/epoll.cpp b/srcs/epoll.cpp new file mode 100644 index 0000000..8de91a1 --- /dev/null +++ b/srcs/epoll.cpp @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* epoll.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/12/06 21:38:30 by apommier #+# #+# */ +/* Updated: 2022/12/06 21:50:06 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../includes/ft_irc.hpp" + +void epoll_add(int epollFd, int fd) +{ + struct epoll_event event; + event.events = EPOLLIN; + event.data.fd = fd; + + if (epoll_ctl(epollFd, EPOLL_CTL_ADD, fd, &event)) + ft_error("epoll_ctl() error"); +} + +int epoll_start() +{ + int epollFd; + + epollFd = epoll_create(5); + if (epollFd == -1) + ft_error("epoll_create() error"); + return (epollFd); +} \ No newline at end of file diff --git a/srcs/main.cpp b/srcs/main.cpp index 73b70dc..ed67e94 100644 --- a/srcs/main.cpp +++ b/srcs/main.cpp @@ -6,61 +6,14 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/01 17:27:33 by apommier #+# #+# */ -/* Updated: 2022/12/06 19:08:00 by apommier ### ########.fr */ +/* Updated: 2022/12/06 21:50:25 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include "../includes/ft_irc.hpp" - -#define PORT 8080 - -void ft_error(std::string str) -{ - std::cout << str << std::endl; - if (errno) - std::cout << strerror(errno); - exit(1); -} - -void initialize(char **av) -{ - int epollFd; - int sockFd; - int newSockFd = 0; - int opt = 1; - struct sockaddr_in addr; - int addrLen = sizeof(addr); - - sockFd = socket(AF_INET, SOCK_STREAM, 0); - if (sockFd == -1) - ft_error("socket() error"); - if (setsockopt(sockFd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) - ft_error("setsockopt() error"); - - std::cout << atoi(av[1]) << std::endl; - - addr.sin_port = htons(atoi(av[1])); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = INADDR_ANY; - - if (addr.sin_port <= 0) - ft_error("wrong format for \nneed to be an positive integer"); - if (bind(sockFd, (struct sockaddr *)&addr, sizeof(addr)) < 0) - ft_error("bind() error"); - if (listen(sockFd, 100) == -1) - ft_error("listen() error"); - newSockFd = accept(sockFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen); - if (newSockFd == -1) - ft_error("accept() error"); - - send(newSockFd, "hello", 5, 0); -} - int main(int ac, char **av) { - - if (!(ac == 3 || ac == 2)) ft_error("wrong number of arguments\nFORMAT: ./ircserv "); initialize(av); diff --git a/srcs/server_loop.cpp b/srcs/server_loop.cpp new file mode 100644 index 0000000..ffb88c1 --- /dev/null +++ b/srcs/server_loop.cpp @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* server_loop.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/12/06 21:58:13 by apommier #+# #+# */ +/* Updated: 2022/12/07 01:16:41 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../includes/ft_irc.hpp" + +#define MAX_EVENTS 5 +#define READ_SIZE 10 + +void start_loop(int epollFd, int oldSock, int newSock) +{ + char buffer[1024] = { 0 }; + int readChar; + + std::cout << "loop start\n"; + while (strncmp("/quit", buffer, 5)) + { + // std::cout << "hehe\n"; + readChar = read(newSock, buffer, 1024); + buffer[readChar] = '\0'; + std::cout << "buffer: " << buffer << std::endl; + // send(newSock, "message received", 18, 0); + + //event_count = epoll_wait(epoll_fd, events, MAX_EVENTS, 30000); + //for (i = 0; i < event_count; i++) + //{ + + //} + } + if (!strncmp("/quit", buffer, 5)) + { + std::cout << "quit message received\n"; + } +} \ No newline at end of file diff --git a/srcs/start_server.cpp b/srcs/start_server.cpp new file mode 100644 index 0000000..f1d7303 --- /dev/null +++ b/srcs/start_server.cpp @@ -0,0 +1,58 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* start_server.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/12/06 21:44:20 by apommier #+# #+# */ +/* Updated: 2022/12/07 01:25:31 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../includes/ft_irc.hpp" + +void initialize(char **av) +{ + int sockFd; + int epollFd; + int newSockFd = 0; + int opt = 1; + struct sockaddr_in addr; + int addrLen = sizeof(addr); + + sockFd = socket(AF_INET, SOCK_STREAM, 0); + if (sockFd == -1) + ft_error("socket() error"); + if (setsockopt(sockFd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) + ft_error("setsockopt() error"); + + addr.sin_port = htons(atoi(av[1])); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = INADDR_ANY; + + if (addr.sin_port <= 0) + ft_error("wrong format for \nneed to be an positive integer"); + if (bind(sockFd, (struct sockaddr *)&addr, sizeof(addr)) < 0) + ft_error("bind() error"); + if (listen(sockFd, 100) == -1) + ft_error("listen() error"); + newSockFd = accept(sockFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen); + if (newSockFd == -1) + ft_error("accept() error"); + + char buffer[1024]; + int nbrRead; + while (strncmp("/quit", buffer, 5)) + { + nbrRead = read() + } + + + epollFd = epoll_start(); + epoll_add(epollFd, newSockFd); + start_loop(epollFd, sockFd, newSockFd); + + + //send(newSockFd, "hello", 5, 0); +} \ No newline at end of file diff --git a/srcs/utils.cpp b/srcs/utils.cpp new file mode 100644 index 0000000..5db8ddf --- /dev/null +++ b/srcs/utils.cpp @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* utils.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/12/06 21:46:41 by apommier #+# #+# */ +/* Updated: 2022/12/07 01:09:12 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../includes/ft_irc.hpp" + +void ft_error(std::string str) +{ + std::cerr << str << std::endl; + if (errno) + { + std::cerr << "errno: " << strerror(errno); + exit(errno); + } + exit(1); +} + +void close_fd(int fd) +{ + if (close(fd)) + ft_error("close() error"); +} \ No newline at end of file