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

P2P编程

开发平台:

Visual C++

  1. // StorageEx.h: interface for the CStorageEx class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_STORAGEEX_H__EB7826B8_4D91_41DF_80BB_927B7396622C__INCLUDED_)
  5. #define AFX_STORAGEEX_H__EB7826B8_4D91_41DF_80BB_927B7396622C__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include "FileInfo.h"
  10. class CDownloaderFeedback;
  11. class CSizeEx
  12. {
  13. public :
  14. CSizeEx(const BLONG x, const BLONG y)
  15. {
  16. cx = x;
  17. cy = y;
  18. }
  19. CSizeEx()
  20. {
  21. cx = cy = 0;
  22. }
  23. BLONG cx;
  24. BLONG cy;
  25. };
  26. class CStorageEx  
  27. {
  28. class CRange
  29. {
  30. public:
  31. CRange(BLONG lbeg, BLONG lend, string strFileName)
  32. {
  33. m_lbeg = lbeg;
  34. m_lend = lend;
  35. m_strFileName = strFileName;
  36. }
  37. BLONG m_lbeg;
  38. BLONG m_lend;
  39. string m_strFileName;
  40. };
  41. public:
  42. CStorageEx();
  43. virtual ~CStorageEx();
  44. bool Create(CDownloaderFeedback* pMain, vector<CFileInfo>& vFiles, 
  45. HANDLE hevDone, long lMaxFilesOpen = 0, bool bLockFiles = true, bool bLockWhileReading = false);
  46. void Close();
  47. void GetUnNeededRanges(const vector<CSize>& vUnNeededFileInxs, vector<CSizeEx>& vUnNeededRanges) const;
  48. BLONG GetTotalLength();
  49. void SetReadOnly();
  50. bool was_preallocated(BLONG lPos, BLONG lLength);
  51. bool flush();
  52. void top_off();
  53. bool write(char *pBuf, BLONG lPos, BLONG lAmount);
  54. bool read(char *pBuf, BLONG lPos, BLONG lAmount, bool bFlushFirst = false);
  55. bool GetFilesRange(vector<long>& vRangeHoles, vector<long>& vFileOffset, long lPieceLen);
  56. private:
  57. bool _intervals(BLONG lPos, BLONG lAmount, vector<CRange>& v);
  58. FILE* _get_file_handle(string strFileName, bool bForWrite);
  59. FILE* _open(string strFileName, string strMode);
  60. void _close(string strFileName);
  61. void _lock_file(string strFileName, FILE* pfile);
  62. void _unlock_file(string strFileName, FILE* pfile);
  63. static time_t getfiletime(string strFileName);
  64. HANDLE m_hevDone;
  65. CDownloaderFeedback* m_pMain;
  66. bool m_bLockFiles;
  67. bool m_bLockWhileReading;
  68. bool m_bMaxFilesOpen;
  69. long m_lMaxFilesOpen;
  70. BLONG m_lTotalLength;
  71. vector<string> m_vHandleBuffer;
  72. vector<CRange> m_vRange;
  73. map<string, BLONG> m_mTops;
  74. map<string, BLONG> m_mSizes;
  75. map<string, time_t> m_mTimes;
  76. map<string, FILE*> m_mHandles;
  77. map<string, bool> m_mWHandles;
  78. };
  79. class CStorage : public CStorageEx
  80. {
  81. };
  82. #endif // !defined(AFX_STORAGEEX_H__EB7826B8_4D91_41DF_80BB_927B7396622C__INCLUDED_)