#pragma once #include #include #include "typedefs.hpp" #include "settings.hpp" #include "util/Buffer.hpp" namespace network { using OnResponse = std::function)>; using OnReject = std::function; class Requests { public: virtual ~Requests() {} virtual void get( const std::string& url, OnResponse onResponse, OnReject onReject=nullptr, long maxSize=0 ) = 0; virtual size_t getTotalUpload() const = 0; virtual size_t getTotalDownload() const = 0; virtual void update() = 0; }; class Socket { public: virtual int recv(char* buffer, size_t length) = 0; virtual int send(const char* buffer, size_t length) = 0; virtual void close() = 0; virtual bool isOpen() const = 0; virtual size_t getTotalUpload() const = 0; virtual size_t getTotalDownload() const = 0; }; class Network { std::unique_ptr requests; std::unordered_map> connections; u64id_t nextConnection = 1; public: Network(std::unique_ptr requests); ~Network(); void get( const std::string& url, OnResponse onResponse, OnReject onReject = nullptr, long maxSize=0 ); Socket* getConnection(u64id_t id) const; u64id_t connect(const std::string& address, int port); size_t getTotalUpload() const; size_t getTotalDownload() const; void update(); static std::unique_ptr create(const NetworkSettings& settings); }; }