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