-
Benny Baumann authoredBenny Baumann authored
async_server.cpp 1.21 KiB
/*
* async_server.cpp
*
* Created on: 02.01.2021
* Author: doralitze
*/
#include "async_server.hpp"
#include <ev++.h>
#include <utility>
namespace rmrf::net {
async_server_socket::async_server_socket(auto_fd&& socket_fd) :
socket(std::forward<auto_fd>(socket_fd)), on_accept{}, on_error{}, io{} {
// This constructor got a constructed socket as an argument
// and forwards it to libev
io.set<async_server_socket, &async_server_socket::cb_ev>(this);
io.start(this->socket, ::ev::READ);
}
async_server_socket::~async_server_socket() {
// Remove this socket from libev ...
io.stop();
}
void async_server_socket::cb_ev(::ev::io &w, int events) {
(void) w;
if (events & ::ev::ERROR) {
// Handle errors
// Rebind socket if missed iov res else
// Log and throw?
return;
}
if (events & ::ev::READ) {
// Handle incoming clients
auto ah = this->get_accept_handler();
}
if (events & ::ev::WRITE) {
// Handle sending data which should be none here
}
}
inline void async_server_socket::set_accept_handler(
const accept_handler_type &value) {
on_accept = value;
}
inline async_server_socket::accept_handler_type async_server_socket::get_accept_handler() const {
return on_accept;
}
}