Client now supports event streams with \r\n line endings in addition to regular \n
This commit is contained in:
parent
7c44f73ec5
commit
66b6be499d
2 changed files with 58 additions and 5 deletions
|
|
@ -142,7 +142,7 @@ int main() {
|
|||
response->write("6\r\nSimple\r\n3\r\nWeb\r\nE\r\n in\r\n\r\nchunks.\r\n0\r\n\r\n", {{"Transfer-Encoding", "chunked"}});
|
||||
};
|
||||
|
||||
server.resource["^/event-stream$"]["GET"] = [](shared_ptr<HttpServer::Response> response, shared_ptr<HttpServer::Request> /*request*/) {
|
||||
server.resource["^/event-stream1$"]["GET"] = [](shared_ptr<HttpServer::Response> response, shared_ptr<HttpServer::Request> /*request*/) {
|
||||
thread work_thread([response] {
|
||||
response->close_connection_after_response = true; // Unspecified content length
|
||||
|
||||
|
|
@ -167,6 +167,31 @@ int main() {
|
|||
work_thread.detach();
|
||||
};
|
||||
|
||||
server.resource["^/event-stream2$"]["GET"] = [](shared_ptr<HttpServer::Response> response, shared_ptr<HttpServer::Request> /*request*/) {
|
||||
thread work_thread([response] {
|
||||
response->close_connection_after_response = true; // Unspecified content length
|
||||
|
||||
// Send header
|
||||
promise<bool> header_error;
|
||||
response->write({{"Content-Type", "text/event-stream"}});
|
||||
response->send([&header_error](const SimpleWeb::error_code &ec) {
|
||||
header_error.set_value(static_cast<bool>(ec));
|
||||
});
|
||||
ASSERT(!header_error.get_future().get());
|
||||
|
||||
*response << "data: 1\r\n\r\n";
|
||||
promise<bool> error;
|
||||
response->send([&error](const SimpleWeb::error_code &ec) {
|
||||
error.set_value(static_cast<bool>(ec));
|
||||
});
|
||||
ASSERT(!error.get_future().get());
|
||||
|
||||
// Write result
|
||||
*response << "data: 2\r\n\r\n";
|
||||
});
|
||||
work_thread.detach();
|
||||
};
|
||||
|
||||
server.resource["^/session-close$"]["GET"] = [](shared_ptr<HttpServer::Response> response, shared_ptr<HttpServer::Request> /*request*/) {
|
||||
response->close_connection_after_response = true; // Unspecified content length
|
||||
response->write("test", {{"Session", "close"}});
|
||||
|
|
@ -371,7 +396,35 @@ int main() {
|
|||
{
|
||||
vector<int> calls(4, 0);
|
||||
std::size_t call_num = 0;
|
||||
client.request("GET", "/event-stream", [&calls, &call_num](shared_ptr<HttpClient::Response> response, const SimpleWeb::error_code &ec) {
|
||||
client.request("GET", "/event-stream1", [&calls, &call_num](shared_ptr<HttpClient::Response> response, const SimpleWeb::error_code &ec) {
|
||||
calls.at(call_num) = 1;
|
||||
if(call_num == 0) {
|
||||
ASSERT(response->content.string().empty());
|
||||
ASSERT(!ec);
|
||||
}
|
||||
else if(call_num == 1) {
|
||||
ASSERT(response->content.string() == "data: 1\n");
|
||||
ASSERT(!ec);
|
||||
}
|
||||
else if(call_num == 2) {
|
||||
ASSERT(response->content.string() == "data: 2\n");
|
||||
ASSERT(!ec);
|
||||
}
|
||||
else if(call_num == 3) {
|
||||
ASSERT(response->content.string().empty());
|
||||
ASSERT(ec == SimpleWeb::error::eof);
|
||||
}
|
||||
++call_num;
|
||||
});
|
||||
SimpleWeb::restart(*client.io_service);
|
||||
client.io_service->run();
|
||||
for(auto call : calls)
|
||||
ASSERT(call);
|
||||
}
|
||||
{
|
||||
vector<int> calls(4, 0);
|
||||
std::size_t call_num = 0;
|
||||
client.request("GET", "/event-stream2", [&calls, &call_num](shared_ptr<HttpClient::Response> response, const SimpleWeb::error_code &ec) {
|
||||
calls.at(call_num) = 1;
|
||||
if(call_num == 0) {
|
||||
ASSERT(response->content.string().empty());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue