#pragma once #include "typedefs.hpp" #include "settings.hpp" #include "util/Buffer.hpp" #include "delegates.hpp" #include #include #include namespace network { using OnResponse = std::function)>; using OnReject = std::function)>; using ConnectCallback = std::function; using ServerDatagramCallback = std::function; using ClientDatagramCallback = std::function; class Requests { public: virtual ~Requests() {} virtual void get( const std::string& url, OnResponse onResponse, OnReject onReject=nullptr, std::vector headers = {}, long maxSize=0 ) = 0; virtual void post( const std::string& url, const std::string& data, OnResponse onResponse, OnReject onReject=nullptr, std::vector headers = {}, long maxSize=0 ) = 0; [[nodiscard]] virtual size_t getTotalUpload() const = 0; [[nodiscard]] virtual size_t getTotalDownload() const = 0; virtual void update() = 0; }; enum class ConnectionState { INITIAL, CONNECTING, CONNECTED, CLOSED }; enum class TransportType { TCP, UDP }; class Connection { public: virtual ~Connection() = default; virtual void close(bool discardAll=false) = 0; virtual int send(const char* buffer, size_t length) = 0; virtual size_t pullUpload() = 0; virtual size_t pullDownload() = 0; bool isPrivate() const { return isprivate; } void setPrivate(bool flag) {isprivate = flag;} [[nodiscard]] virtual int getPort() const = 0; [[nodiscard]] virtual std::string getAddress() const = 0; [[nodiscard]] virtual ConnectionState getState() const = 0; [[nodiscard]] virtual TransportType getTransportType() const noexcept = 0; protected: bool isprivate = false; }; class ReadableConnection : public Connection { public: virtual int recv(char* buffer, size_t length) = 0; virtual int available() = 0; }; class Server { public: virtual ~Server() = default; virtual void update() = 0; virtual void close() = 0; virtual bool isOpen() = 0; [[nodiscard]] virtual TransportType getTransportType() const noexcept = 0; [[nodiscard]] virtual int getPort() const = 0; bool isPrivate() const { return isprivate; } void setPrivate(bool flag) { isprivate = flag; } protected: bool isprivate = false; }; }