geekbrains_network_programming/lesson_04/server/tcp_server.hpp

54 lines
1.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* tcp_server.hpp
*
* Created on: 20 сент. 2022 г.
* Author: alexander
*/
#pragma once
#include <boost/asio.hpp>
#include <connection/tcp_connection.hpp>
#include <vector>
#include <optional>
#include <unordered_set>
namespace azh
{
namespace io = boost::asio;
enum class IPV
{
V4, V6
};
class TCPServer
{
using OnJoinHandler = std::function<void(TCPConnection::Pointer)>;
using OnLeaveHandler = std::function<void(TCPConnection::Pointer)>;
using OnClientMessageHandler = std::function<void(std::string)>;
public:
TCPServer(IPV ipv, int port);
int run();
void broadcast(const std::string& message);
public:
OnJoinHandler onJoin;
OnLeaveHandler onLeave;
OnClientMessageHandler onClientMessage;
private:
IPV _ipVersion;
int _port;
io::io_context _ioContext;
io::ip::tcp::acceptor _acceptor;
std::optional<io::ip::tcp::socket> _socket;
std::unordered_set<TCPConnection::Pointer> _connections;
private:
void startAccept();
};
}