Separate Index class to track streams via intrusive list

This commit is contained in:
flamingcow
2019-05-12 08:45:56 -07:00
parent 79709c5b25
commit d29157c1ac
7 changed files with 84 additions and 29 deletions

View File

@@ -1,9 +1,19 @@
#include "stream.h"
#include "index.h"
namespace firesse {
Stream::Stream(firecgi::Request* request)
: request_(request) {}
Stream::Stream(firecgi::Request* request, Index* index)
: request_(request),
index_(index) {
index_->Add(this);
}
Stream::~Stream() {
std::lock_guard l(mu_);
index_->Remove(this);
}
void Stream::OnClose(const std::function<void()>& callback) {
on_close_ = callback;
@@ -31,19 +41,10 @@ bool Stream::End() {
return request_->End();
}
std::chrono::steady_clock::time_point Stream::LastMessageTime() {
std::lock_guard l(mu_);
return last_message_time_;
}
void Stream::Close() {
if (on_close_) {
on_close_();
}
}
bool IsFresherStream::operator() (Stream* a, Stream* b) const {
return a->LastMessageTime() > b->LastMessageTime();
}
} // namespace firesse