diff options
author | Juan Manuel Tomás <jtomas1815@gmail.com> | 2020-07-17 23:31:57 -0300 |
---|---|---|
committer | Juan Manuel Tomás <jtomas1815@gmail.com> | 2020-07-17 23:31:57 -0300 |
commit | e9122394f97d54a6b28b4dd52db24e22cb1ab340 (patch) | |
tree | aefb94d3c11daca71b52757a2d52a414a7a8f5ab /src/server/jet.cpp | |
parent | d608bef678fa97b3af910fa62598c55f33650825 (diff) | |
download | jet-e9122394f97d54a6b28b4dd52db24e22cb1ab340.tar.gz jet-e9122394f97d54a6b28b4dd52db24e22cb1ab340.zip |
Move main files into subdirectories
Diffstat (limited to 'src/server/jet.cpp')
-rw-r--r-- | src/server/jet.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/server/jet.cpp b/src/server/jet.cpp new file mode 100644 index 0000000..5cc3ee4 --- /dev/null +++ b/src/server/jet.cpp @@ -0,0 +1,72 @@ +#include <stdio.h> +#include <stdint.h> +#include <string.h> +#include <stdlib.h> + +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <sys/socket.h> +#include <netinet/ip.h> +#include <arpa/inet.h> +#include <unistd.h> +#include <sys/epoll.h> + +#include <common/ipc.cpp> +#include <server/page.cpp> +#include <server/buffer.cpp> +#include <server/point.cpp> +#include <server/client.cpp> + +#define PORT 6969 +#define MAX_EVENTS 10 + +int create_listener() { + int s = socket(AF_INET, SOCK_STREAM, 0); + sockaddr_in addr = { AF_INET, htons(PORT), htonl(INADDR_LOOPBACK)}; + int opt = 1; + setsockopt(s, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt)); + bind(s, (sockaddr *) &addr, sizeof(sockaddr_in)); + listen(s, MAX_EVENTS); + return s; +} + +int main() { + Buffer scratch("scratch"); + scratch.read_file("test.txt"); + + int listener = create_listener(); + + int epollfd = epoll_create1(0); + + epoll_event ev; + ev.events = EPOLLIN; + ev.data.fd = listener; + epoll_ctl(epollfd, EPOLL_CTL_ADD, listener, &ev); + + epoll_event events[MAX_EVENTS]; + Client *clients[1024] = {}; + + while (true) { + int nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1); + + for (int i = 0; i < nfds; i++) { + if (events[i].data.fd == listener) { + int clientfd = accept(listener, 0, 0); + ev.events = EPOLLIN | EPOLLET; + ev.data.fd = clientfd; + if (clients[clientfd]) { + delete clients[clientfd]; + } + Client *c = new Client(scratch); + c->sockfd = clientfd; + clients[clientfd] = c; + epoll_ctl(epollfd, EPOLL_CTL_ADD, clientfd, &ev); + } else { + clients[events[i].data.fd]->parse_message(); + } + } + } + + close(listener); +} |