Skip to content
Snippets Groups Projects
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;
}

}