diff options
Diffstat (limited to 'net/tools/flip_server/output_ordering.cc')
-rw-r--r-- | net/tools/flip_server/output_ordering.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/net/tools/flip_server/output_ordering.cc b/net/tools/flip_server/output_ordering.cc index 101f668..409ec0a 100644 --- a/net/tools/flip_server/output_ordering.cc +++ b/net/tools/flip_server/output_ordering.cc @@ -20,6 +20,8 @@ OutputOrdering::OutputOrdering(SMConnectionInterface* connection) epoll_server_ = connection->epoll_server(); } +OutputOrdering::~OutputOrdering() {} + void OutputOrdering::Reset() { while (!stream_ids_.empty()) { StreamIdToPriorityMap::iterator sitpmi = stream_ids_.begin(); @@ -38,6 +40,45 @@ bool OutputOrdering::ExistsInPriorityMaps(uint32 stream_id) { return sitpmi != stream_ids_.end(); } +OutputOrdering::BeginOutputtingAlarm::BeginOutputtingAlarm( + OutputOrdering* oo, + OutputOrdering::PriorityMapPointer* pmp, + const MemCacheIter& mci) + : output_ordering_(oo), + pmp_(pmp), + mci_(mci), + epoll_server_(NULL) { +} + +OutputOrdering::BeginOutputtingAlarm::~BeginOutputtingAlarm() { + if (epoll_server_ && pmp_->alarm_enabled) + epoll_server_->UnregisterAlarm(pmp_->alarm_token); +} + +int64 OutputOrdering::BeginOutputtingAlarm::OnAlarm() { + OnUnregistration(); + output_ordering_->MoveToActive(pmp_, mci_); + VLOG(2) << "ON ALARM! Should now start to output..."; + delete this; + return 0; +} + +void OutputOrdering::BeginOutputtingAlarm::OnRegistration( + const EpollServer::AlarmRegToken& tok, + EpollServer* eps) { + epoll_server_ = eps; + pmp_->alarm_token = tok; + pmp_->alarm_enabled = true; +} + +void OutputOrdering::BeginOutputtingAlarm::OnUnregistration() { + pmp_->alarm_enabled = false; +} + +void OutputOrdering::BeginOutputtingAlarm::OnShutdown(EpollServer* eps) { + OnUnregistration(); +} + void OutputOrdering::MoveToActive(PriorityMapPointer* pmp, MemCacheIter mci) { VLOG(2) << "Moving to active!"; first_data_senders_.push_back(mci); |