Files
firesse/server.cc

41 lines
989 B
C++
Raw Permalink Normal View History

2019-05-07 23:44:55 -07:00
#include "server.h"
2019-05-05 00:11:57 -07:00
namespace firesse {
Server::Server(int port, const std::function<void(Stream*)>& callback)
2019-05-18 12:18:26 -07:00
: callback_(callback),
keep_alive_(std::chrono::seconds(15), &index_),
firecgi_server_(
port, [this](firecgi::Request* request) { OnRequest(request); }, 1) {}
2019-05-05 00:11:57 -07:00
void Server::Serve() {
2019-05-18 12:18:26 -07:00
keep_alive_.Start();
firecgi_server_.Serve();
keep_alive_.Stop();
2019-05-05 00:11:57 -07:00
}
2019-05-18 12:18:26 -07:00
void Server::Shutdown() { firecgi_server_.Shutdown(); }
void Server::RegisterSignalHandlers() {
2019-05-18 12:18:26 -07:00
firecgi_server_.RegisterSignalHandlers();
}
void Server::OnRequest(firecgi::Request* request) {
2019-05-18 12:18:26 -07:00
request->WriteHeader("Content-Type", "text/event-stream; charset=utf-8");
request->WriteHeader("Cache-Control", "no-cache");
request->WriteHeader("X-Accel-Buffering", "no");
request->WriteBody("");
auto stream = new Stream(request, &index_);
{
request->OnClose([stream]() {
stream->Close();
delete stream;
});
}
callback_(stream);
2019-05-05 00:11:57 -07:00
}
2019-05-18 12:18:26 -07:00
} // namespace firesse