geekbrains_network_programming/lesson_04/server/tcp_server.hpp

48 lines
937 B
C++
Raw Normal View History

2022-09-20 13:37:06 +00:00
/*
* server.hpp
*
* Created on: 20 сент. 2022 г.
* Author: alexander
*/
#pragma once
#include <boost/asio.hpp>
#include <connection/connection.hpp>
#include <vector>
#include <functional>
2022-09-20 13:37:06 +00:00
namespace azh
{
enum class IPV
{
V4, V6
};
class TCPServer
{
public:
TCPServer(IPV ipv, int port);
2022-09-20 13:37:06 +00:00
int run();
template<typename T>
void writeToConnection(int connectionIndex, const T& message);
template<typename T>
using listenCallback = std::function<void(int, const T&)>;
template<typename T>
void registerListenCallback(int connectionIndex, listenCallback<T> callback);
2022-09-20 13:37:06 +00:00
private:
IPV _ipVersion;
int _port;
boost::asio::io_context _ioContext;
boost::asio::ip::tcp::acceptor _acceptor;
std::vector<Connection::pointer> _connections;
2022-09-20 13:37:06 +00:00
private:
void startAccept();
};
}