track.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "track.h"
  2. using namespace NRainCheck;
  3. using namespace NRainCheck::NPrivate;
  4. void TTaskTrackerReceipt::SetDone() {
  5. TaskTracker->GetQueue<TTaskTrackerReceipt*>()->EnqueueAndSchedule(this);
  6. }
  7. TString TTaskTrackerReceipt::GetStatusSingleLine() {
  8. return Task->GetStatusSingleLine();
  9. }
  10. TTaskTracker::TTaskTracker(NActor::TExecutor* executor)
  11. : NActor::TActor<TTaskTracker>(executor)
  12. {
  13. }
  14. TTaskTracker::~TTaskTracker() {
  15. Y_ASSERT(Tasks.Empty());
  16. }
  17. void TTaskTracker::Shutdown() {
  18. ShutdownFlag.Set(true);
  19. Schedule();
  20. ShutdownEvent.WaitI();
  21. }
  22. void TTaskTracker::ProcessItem(NActor::TDefaultTag, NActor::TDefaultTag, ITaskFactory* taskFactory) {
  23. THolder<ITaskFactory> holder(taskFactory);
  24. THolder<TTaskTrackerReceipt> receipt(new TTaskTrackerReceipt(this));
  25. receipt->Task = taskFactory->NewTask(receipt.Get());
  26. Tasks.PushBack(receipt.Release());
  27. }
  28. void TTaskTracker::ProcessItem(NActor::TDefaultTag, NActor::TDefaultTag, TTaskTrackerReceipt* receipt) {
  29. Y_ASSERT(!receipt->Empty());
  30. receipt->Unlink();
  31. delete receipt;
  32. }
  33. void TTaskTracker::ProcessItem(NActor::TDefaultTag, NActor::TDefaultTag, TAsyncResult<TTaskTrackerStatus>* status) {
  34. TTaskTrackerStatus s;
  35. s.Size = Tasks.Size();
  36. status->SetResult(s);
  37. }
  38. void TTaskTracker::Act(NActor::TDefaultTag) {
  39. GetQueue<TAsyncResult<TTaskTrackerStatus>*>()->DequeueAll();
  40. GetQueue<ITaskFactory*>()->DequeueAll();
  41. GetQueue<TTaskTrackerReceipt*>()->DequeueAll();
  42. if (ShutdownFlag.Get()) {
  43. if (Tasks.Empty()) {
  44. ShutdownEvent.Signal();
  45. }
  46. }
  47. }
  48. ui32 TTaskTracker::Size() {
  49. TAsyncResult<TTaskTrackerStatus> r;
  50. GetQueue<TAsyncResult<TTaskTrackerStatus>*>()->EnqueueAndSchedule(&r);
  51. return r.GetResult().Size;
  52. }