From cd2decce51c32b8c0531a87ea849e9f8e80db0d3 Mon Sep 17 00:00:00 2001 From: Joursoir Date: Mon, 23 Nov 2020 20:07:36 +0300 Subject: server: add first (work with sockets) level of abstraction --- src/server/sockets.hpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/server/sockets.hpp (limited to 'src/server/sockets.hpp') diff --git a/src/server/sockets.hpp b/src/server/sockets.hpp new file mode 100644 index 0000000..2f47e3b --- /dev/null +++ b/src/server/sockets.hpp @@ -0,0 +1,37 @@ +#ifndef SOCKETS_H +#define SOCKETS_H + +#include +#include + +class FdHandler { // abstract class + int fd; +public: + FdHandler(int i_fd) : fd(i_fd) {} + virtual ~FdHandler() { close(fd); } + + int GetFd() const { return fd; } + + virtual bool WantRead() const { return true; } + virtual bool WantWrite() const { return false; } + virtual void Handle(bool r, bool w) = 0; +}; + +class EventSelector { + FdHandler **fd_array; + struct pollfd *fds; + int fd_array_len; + int max_fd; + + bool exit_flag; +public: + EventSelector() : fd_array(0), fds(0), max_fd(-1), exit_flag(false) {} + ~EventSelector(); + + void Add(FdHandler *h); + bool Remove(FdHandler *h); + + void Run(); + void BreakLoop() { exit_flag = true; } +}; +#endif \ No newline at end of file -- cgit v1.2.3-18-g5258