server
: introduce supposedly lighterweight is_alive in httplib (https://github.com/yhirose/cpp-httplib/pull/1956)
This commit is contained in:
parent
43e306e08f
commit
42f546500f
3 changed files with 20 additions and 2 deletions
|
@ -457,6 +457,7 @@ public:
|
|||
|
||||
std::function<bool(const char *data, size_t data_len)> write;
|
||||
std::function<bool()> is_writable;
|
||||
std::function<bool()> is_alive;
|
||||
std::function<void()> done;
|
||||
std::function<void(const Headers &trailer)> done_with_trailer;
|
||||
std::ostream os;
|
||||
|
@ -639,6 +640,7 @@ public:
|
|||
|
||||
virtual bool is_readable() const = 0;
|
||||
virtual bool is_writable() const = 0;
|
||||
virtual bool is_alive() const = 0;
|
||||
|
||||
virtual ssize_t read(char *ptr, size_t size) = 0;
|
||||
virtual ssize_t write(const char *ptr, size_t size) = 0;
|
||||
|
@ -2135,6 +2137,7 @@ public:
|
|||
|
||||
bool is_readable() const override;
|
||||
bool is_writable() const override;
|
||||
bool is_alive() const override;
|
||||
ssize_t read(char *ptr, size_t size) override;
|
||||
ssize_t write(const char *ptr, size_t size) override;
|
||||
void get_remote_ip_and_port(std::string &ip, int &port) const override;
|
||||
|
@ -2945,6 +2948,7 @@ public:
|
|||
|
||||
bool is_readable() const override;
|
||||
bool is_writable() const override;
|
||||
bool is_alive() const override;
|
||||
ssize_t read(char *ptr, size_t size) override;
|
||||
ssize_t write(const char *ptr, size_t size) override;
|
||||
void get_remote_ip_and_port(std::string &ip, int &port) const override;
|
||||
|
@ -2975,6 +2979,7 @@ public:
|
|||
|
||||
bool is_readable() const override;
|
||||
bool is_writable() const override;
|
||||
bool is_alive() const override;
|
||||
ssize_t read(char *ptr, size_t size) override;
|
||||
ssize_t write(const char *ptr, size_t size) override;
|
||||
void get_remote_ip_and_port(std::string &ip, int &port) const override;
|
||||
|
@ -4088,6 +4093,7 @@ inline bool write_content(Stream &strm, const ContentProvider &content_provider,
|
|||
};
|
||||
|
||||
data_sink.is_writable = [&]() -> bool { return strm.is_writable(); };
|
||||
data_sink.is_alive = [&]() -> bool { return strm.is_alive(); };
|
||||
|
||||
while (offset < end_offset && !is_shutting_down()) {
|
||||
if (!strm.is_writable()) {
|
||||
|
@ -4134,6 +4140,7 @@ write_content_without_length(Stream &strm,
|
|||
};
|
||||
|
||||
data_sink.is_writable = [&]() -> bool { return strm.is_writable(); };
|
||||
data_sink.is_alive = [&]() -> bool { return strm.is_alive(); };
|
||||
|
||||
data_sink.done = [&](void) { data_available = false; };
|
||||
|
||||
|
@ -4186,6 +4193,7 @@ write_content_chunked(Stream &strm, const ContentProvider &content_provider,
|
|||
};
|
||||
|
||||
data_sink.is_writable = [&]() -> bool { return strm.is_writable(); };
|
||||
data_sink.is_alive = [&]() -> bool { return strm.is_alive(); };
|
||||
|
||||
auto done_with_trailer = [&](const Headers *trailer) {
|
||||
if (!ok) { return; }
|
||||
|
@ -5484,6 +5492,10 @@ inline bool SocketStream::is_writable() const {
|
|||
is_socket_alive(sock_);
|
||||
}
|
||||
|
||||
inline bool SocketStream::is_alive() const {
|
||||
return is_socket_alive(sock_);
|
||||
}
|
||||
|
||||
inline ssize_t SocketStream::read(char *ptr, size_t size) {
|
||||
#ifdef _WIN32
|
||||
size =
|
||||
|
@ -5558,6 +5570,8 @@ inline bool BufferStream::is_readable() const { return true; }
|
|||
|
||||
inline bool BufferStream::is_writable() const { return true; }
|
||||
|
||||
inline bool BufferStream::is_alive() const { return true; }
|
||||
|
||||
inline ssize_t BufferStream::read(char *ptr, size_t size) {
|
||||
#if defined(_MSC_VER) && _MSC_VER < 1910
|
||||
auto len_read = buffer._Copy_s(ptr, size, size, position);
|
||||
|
@ -8348,6 +8362,10 @@ inline bool SSLSocketStream::is_writable() const {
|
|||
is_socket_alive(sock_);
|
||||
}
|
||||
|
||||
inline bool SSLSocketStream::is_alive() const {
|
||||
return is_socket_alive(sock_);
|
||||
}
|
||||
|
||||
inline ssize_t SSLSocketStream::read(char *ptr, size_t size) {
|
||||
if (SSL_pending(ssl_) > 0) {
|
||||
return SSL_read(ssl_, ptr, static_cast<int>(size));
|
||||
|
|
|
@ -2445,7 +2445,7 @@ static void handle_tasks(
|
|||
};
|
||||
if (!stream) {
|
||||
res.set_content_provider(MIMETYPE_JSON, [create_tasks, payload, state, &ctx_server](size_t, httplib::DataSink & sink) {
|
||||
auto is_alive = [&sink]() { return sink.is_writable(); };
|
||||
auto is_alive = [&sink]() { return sink.is_alive(); };
|
||||
state->task_ids = create_tasks(is_alive);
|
||||
payload(state->task_ids, sink);
|
||||
ctx_server.queue_results.remove_waiting_task_ids(state->task_ids);
|
||||
|
@ -2453,7 +2453,7 @@ static void handle_tasks(
|
|||
}, resource_releaser);
|
||||
} else {
|
||||
res.set_chunked_content_provider("text/event-stream", [create_tasks, payload, state, &ctx_server](size_t, httplib::DataSink & sink) {
|
||||
auto is_alive = [&sink]() { return sink.is_writable(); };
|
||||
auto is_alive = [&sink]() { return sink.is_alive(); };
|
||||
state->task_ids = create_tasks(is_alive);
|
||||
payload(state->task_ids, sink);
|
||||
ctx_server.queue_results.remove_waiting_task_ids(state->task_ids);
|
||||
|
|
BIN
tests/.DS_Store
vendored
Normal file
BIN
tests/.DS_Store
vendored
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue