#pragma once

#include <memory>

class Socket;
using SocketPtr = std::unique_ptr<Socket>;

class ISocketInterface
{
public:

    ISocketInterface() = default;

    virtual ~ISocketInterface() = default;

    virtual void InitializeSocket(const SocketPtr& socket, const std::string& address = {}) = 0;
    virtual void Listen(const SocketPtr& socket) = 0;
    virtual void Run(const SocketPtr& socket) = 0;

    virtual void Write(const SocketPtr& socket, const std::string& message) = 0;
};

using ISocketInterfaceUPtr = std::unique_ptr<ISocketInterface>;
