Downloader.cpp
上传用户:lds876
上传日期:2013-05-25
资源大小:567k
文件大小:3k
源码类别:

P2P编程

开发平台:

Visual C++

  1. // Downloader.cpp: implementation of the CDownloader class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "testbt.h"
  6. #include "Downloader.h"
  7. /*
  8. #include "Storage.h"
  9. #include "PiecePicker.h"
  10. #include "Measure.h"
  11. #include "RateMeasure.h"
  12. //*/
  13. #include "SingleDownload.h"
  14. #include "StorageWrapper.h"
  15. #ifdef _DEBUG
  16. #undef THIS_FILE
  17. static char THIS_FILE[]=__FILE__;
  18. #define new DEBUG_NEW
  19. #endif
  20. //////////////////////////////////////////////////////////////////////
  21. // Construction/Destruction
  22. //////////////////////////////////////////////////////////////////////
  23. CDownloader::CDownloader()
  24. {
  25. m_bCreate = false;
  26. }
  27. bool CDownloader::Create(CDownloaderFeedback* pDownloaderFeedback, CStorageWrapper* pstrorage, CPiecePicker* pPicker, long lBacklog, 
  28. long lMaxRatePeriod, CMeasure* pDownMeasure, long lNumPieces, long lSnubTime, 
  29. CRateMeasure* pRateMeasure)
  30. {
  31. m_pDownloaderFeedback = pDownloaderFeedback;
  32. m_pstrorage = pstrorage;
  33. m_pPicker = pPicker;
  34. m_lBacklog = lBacklog;
  35. m_lMaxRatePeriod = lMaxRatePeriod;
  36. m_pDownMeasure = pDownMeasure;
  37. m_lNumPieces = lNumPieces;
  38. m_lSnubTime = lSnubTime;
  39. m_pRateMeasure = pRateMeasure;
  40. m_bEndgame = false;
  41. m_bCreate = true;
  42. return true;
  43. }
  44. CDownloader::~CDownloader()
  45. {
  46. // for (int i=0; i<m_vDownloads.size(); i++)
  47. // delete m_vDownloads[i];
  48. }
  49. CSingleDownload* CDownloader::make_download(CConnection* pConnection)
  50. {
  51. CSingleDownload* pnew = new CSingleDownload(m_pDownloaderFeedback, this, pConnection);
  52. m_vDownloads.push_back(pnew);
  53. if (m_bEndgame)
  54. {
  55. pnew->make_endgame(m_vRequests);
  56. pnew->mak_endgameflush();
  57. }
  58. return pnew;
  59. }
  60. void CDownloader::make_endgame()
  61. {
  62. assert(!m_bEndgame);
  63. m_bEndgame = true;
  64. for (int i=0; i<m_vDownloads.size(); i++)
  65. {
  66. m_vDownloads[i]->make_endgame(m_vRequests);
  67. }
  68. for (i=0; i<m_vDownloads.size(); i++)
  69. {
  70. m_vDownloads[i]->mak_endgameflush();
  71. TRACE("rnm_vRequests : (index, begin, length){");
  72. for (int j=0; j<m_vRequests.size(); j++)
  73. {
  74. char szText[100] = {0};
  75. sprintf(szText, "(%d, %d, %d)", m_vRequests[j].m_index, m_vRequests[j].m_begin, m_vRequests[j].m_length);
  76. TRACE(szText);
  77. }
  78. TRACE("}rn");
  79. }
  80. }
  81. /////////////////////////////////////////////////////////////////
  82. // called by storageWrapper, when files needed setup change.
  83. //
  84. bool CDownloader::is_endgame()
  85. {
  86. return m_bEndgame;
  87. }
  88. void CDownloader::cancel_endgame()
  89. {
  90. assert(m_bEndgame);
  91. m_bEndgame = false;
  92. for (int i=0; i<m_vRequests.size();i++)
  93. {
  94. CRequestsItem& item = m_vRequests[i];
  95. m_pstrorage->request_lost(item.m_index, item.m_begin, item.m_length);
  96. }
  97. m_vRequests.clear();
  98. for (i=0; i<m_vDownloads.size(); i++)
  99. {
  100. m_vDownloads[i]->cancel_endgame();
  101. }
  102. }
  103. void CDownloader::OnNeedFilesChanged()
  104. {
  105. for (int i=0; i<m_vDownloads.size(); i++)
  106. {
  107. m_vDownloads[i]->download_more();
  108. }
  109. }
  110. bool CDownloader::IsCreate()
  111. {
  112. return m_bCreate;
  113. }