🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
NetworkStreamReceiver.hpp
浏览该文件的文档.
1
21
22#pragma once
23
24#include "AstGlobal.h"
25#include "NetworkResponse.hpp"
26#include <map>
27#include <string>
28
29AST_NAMESPACE_BEGIN
30
36class NetworkResponse;
37
40class AST_UTIL_API NetworkStreamReceiver
41{
42public:
43 NetworkStreamReceiver() = default;
44 virtual ~NetworkStreamReceiver() = default;
45
49 virtual void onHeaders(int statusCode,
50 const std::map<std::string, std::string>& headers)
51 {
52 }
53
58 virtual errc_t onData(const char* data, size_t size) = 0;
59
62 virtual void onError(errc_t error) {}
63
65 virtual void onComplete() {}
66};
67
68
74{
75public:
77 : response_(response) {}
78
79 void onHeaders(int statusCode,
80 const std::map<std::string, std::string>& headers) override
81 {
82 response_.setStatusCode(statusCode);
83 response_.setHeaders(headers);
84 }
85
86 errc_t onData(const char* data, size_t size) override
87 {
88 // 防止无限制响应体耗尽内存(上限 100 MB)
89 if (body_.size() + size > kMaxBodySize)
90 return eErrorOutOfRange;
91 body_.append(data, size);
92 return 0;
93 }
94
95 void onComplete() override
96 {
97 response_.setBody(body_);
98 }
99
100 void onError(errc_t /*error*/) override
101 {
102 // 保留已累积的部分体数据(用于诊断)
103 if (!body_.empty())
104 response_.setBody(body_);
105 }
106
107private:
108 static constexpr size_t kMaxBodySize = 100 * 1024 * 1024; // 100 MB
109 NetworkResponse& response_;
110 std::string body_;
111};
112
115AST_NAMESPACE_END
将流式数据收集到 NetworkResponse 的适配器
定义 NetworkStreamReceiver.hpp:74
void onHeaders(int statusCode, const std::map< std::string, std::string > &headers) override
收到 HTTP 响应头(在 onData 之前触发一次)
定义 NetworkStreamReceiver.hpp:79
void onComplete() override
数据接收完毕(正常完成时触发)
定义 NetworkStreamReceiver.hpp:95
void onError(errc_t) override
发生网络错误
定义 NetworkStreamReceiver.hpp:100
errc_t onData(const char *data, size_t size) override
收到一块响应体数据(可能被多次调用)
定义 NetworkStreamReceiver.hpp:86
定义 NetworkResponse.hpp:37
流式数据接收器
定义 NetworkStreamReceiver.hpp:41
virtual void onHeaders(int statusCode, const std::map< std::string, std::string > &headers)
收到 HTTP 响应头(在 onData 之前触发一次)
定义 NetworkStreamReceiver.hpp:49
virtual void onComplete()
数据接收完毕(正常完成时触发)
定义 NetworkStreamReceiver.hpp:65
virtual errc_t onData(const char *data, size_t size)=0
收到一块响应体数据(可能被多次调用)
virtual void onError(errc_t error)
发生网络错误
定义 NetworkStreamReceiver.hpp:62