#pragma once ////////////////////////////////////////////////////////////////////////// // 纯虚类,子类须实现该类中的纯虚接口 class rpc_callback { public: rpc_callback() {} virtual ~rpc_callback() {} // 设置 HTTP 请求头数据虚函数 virtual void SetRequestHdr(const char* hdr) = 0; // 设置 HTTP 响应头数据虚函数 virtual void SetResponseHdr(const char* hdr) = 0; // 下载过程中的回调函数虚函数 virtual void OnDownloading(long long int content_length, long long int total_read) = 0; // 下载完成时的回调函数虚函数 virtual void OnDownloadOver(long long int total_read, double spent) = 0; }; ////////////////////////////////////////////////////////////////////////// /** * http 请求过程类,该类对象在子线程中发起远程 HTTP 请求过程,将处理结果 * 返回给主线程 */ class http_download : public acl::rpc_request { public: /** * 构造函数 * @param addr {const char*} HTTP 服务器地址,格式:domain:port * @param url {const char*} http url 地址 * @param callback {rpc_callback*} http 请求结果通过此类对象 * 通知主线程过程 */ http_download(const char* addr, const char* url, rpc_callback* callback); protected: ~http_download() {} // 基类虚函数:子线程处理函数 virtual void rpc_run(); // 基类虚函数:主线程处理过程,收到子线程任务完成的消息 virtual void rpc_onover(); // 基类虚函数:主线程处理过程,收到子线程的通知消息 virtual void rpc_wakeup(void* ctx); private: acl::string addr_; acl::string url_; acl::string req_hdr_; acl::string res_hdr_; bool error_; long long int total_read_; long long int content_length_; double total_spent_; rpc_callback* callback_; };