123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #include "track.h"
- using namespace NRainCheck;
- using namespace NRainCheck::NPrivate;
- void TTaskTrackerReceipt::SetDone() {
- TaskTracker->GetQueue<TTaskTrackerReceipt*>()->EnqueueAndSchedule(this);
- }
- TString TTaskTrackerReceipt::GetStatusSingleLine() {
- return Task->GetStatusSingleLine();
- }
- TTaskTracker::TTaskTracker(NActor::TExecutor* executor)
- : NActor::TActor<TTaskTracker>(executor)
- {
- }
- TTaskTracker::~TTaskTracker() {
- Y_ASSERT(Tasks.Empty());
- }
- void TTaskTracker::Shutdown() {
- ShutdownFlag.Set(true);
- Schedule();
- ShutdownEvent.WaitI();
- }
- void TTaskTracker::ProcessItem(NActor::TDefaultTag, NActor::TDefaultTag, ITaskFactory* taskFactory) {
- THolder<ITaskFactory> holder(taskFactory);
- THolder<TTaskTrackerReceipt> receipt(new TTaskTrackerReceipt(this));
- receipt->Task = taskFactory->NewTask(receipt.Get());
- Tasks.PushBack(receipt.Release());
- }
- void TTaskTracker::ProcessItem(NActor::TDefaultTag, NActor::TDefaultTag, TTaskTrackerReceipt* receipt) {
- Y_ASSERT(!receipt->Empty());
- receipt->Unlink();
- delete receipt;
- }
- void TTaskTracker::ProcessItem(NActor::TDefaultTag, NActor::TDefaultTag, TAsyncResult<TTaskTrackerStatus>* status) {
- TTaskTrackerStatus s;
- s.Size = Tasks.Size();
- status->SetResult(s);
- }
- void TTaskTracker::Act(NActor::TDefaultTag) {
- GetQueue<TAsyncResult<TTaskTrackerStatus>*>()->DequeueAll();
- GetQueue<ITaskFactory*>()->DequeueAll();
- GetQueue<TTaskTrackerReceipt*>()->DequeueAll();
- if (ShutdownFlag.Get()) {
- if (Tasks.Empty()) {
- ShutdownEvent.Signal();
- }
- }
- }
- ui32 TTaskTracker::Size() {
- TAsyncResult<TTaskTrackerStatus> r;
- GetQueue<TAsyncResult<TTaskTrackerStatus>*>()->EnqueueAndSchedule(&r);
- return r.GetResult().Size;
- }
|