#pragma once

#include <boost/asio/ip/tcp.hpp>

class SimpleTCPServer {
protected:
    boost::asio::io_context io_context;
    boost::asio::ip::tcp::acceptor acceptor;

    void SetupAsyncAccept();

public:
    SimpleTCPServer(uint16_t port);

    virtual void OnClientConnected(boost::asio::ip::tcp::socket) = 0;

    void RunTCPServer();
    void StopTCPServer();
};