PackageFileHead.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:2k
源码类别:

模拟服务器

开发平台:

C/C++

  1. // PackageFileHead.cpp: implementation of the PackageFileHead class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "PackageFileHead.h"
  6. //////////////////////////////////////////////////////////////////////
  7. // Construction/Destruction
  8. //////////////////////////////////////////////////////////////////////
  9. namespace PackageCQ
  10. {
  11. PackageFileHead::PackageFileHead()
  12. :m_FileTypeString()
  13. {
  14. memset((char *)&m_FileHeadInfo,0,sizeof(m_FileHeadInfo));
  15. }
  16. PackageFileHead::~PackageFileHead()
  17. {
  18. }
  19. const PackageFileHead& PackageFileHead::operator<< (iostream &PackageDataStream)
  20. {
  21. if(!PackageDataStream.eof())
  22. {
  23. PackageDataStream.read((char *)(&m_FileHeadInfo),sizeof(m_FileHeadInfo));
  24. }
  25. else
  26. {
  27. throw exception("File is end when Read File Head ");
  28. }
  29. if(PackageDataStream.bad() )
  30. {
  31. throw exception("read error when Read File Head");
  32. }
  33. char FileType[FileIDLength + 1];
  34. memcpy(FileType,m_FileHeadInfo.signature,FileIDLength);
  35. FileType[FileIDLength  ] = 0;
  36. m_FileTypeString = FileType;
  37. return * this;
  38. }
  39. const string& PackageFileHead::GetFileType() const
  40. {
  41. return m_FileTypeString;
  42. }
  43. unsigned long  PackageFileHead::GetBlockCount() const
  44. {
  45. return m_FileHeadInfo.count ;
  46. }
  47. PackageFileHead& PackageFileHead::operator >>(iostream &PackageDataStream)
  48. {
  49. PackageDataStream.write((char *)&m_FileHeadInfo,sizeof(m_FileHeadInfo));
  50. if(PackageDataStream.bad())
  51. {
  52. throw("write File Head Error");
  53. }
  54. return  * this;
  55. }
  56. PackageFileHead::PackageFileHead(unsigned long BlockCount, unsigned long IndexOffset, const string &FileTypeString,unsigned long DataOffset,unsigned long CRC32)
  57. {
  58. m_FileHeadInfo.count        = BlockCount;
  59. m_FileTypeString            = FileTypeString;
  60. memcpy(m_FileHeadInfo.signature,m_FileTypeString.c_str(),FileIDLength);
  61. m_FileHeadInfo.index_offset = IndexOffset;
  62. m_FileHeadInfo.data_offset  = DataOffset;
  63. m_FileHeadInfo.crc32        = CRC32;
  64. memset(m_FileHeadInfo.reserved,0,ReservedLength); 
  65. }
  66. unsigned long PackageFileHead::GetIndexOffset()
  67. {
  68. return m_FileHeadInfo.index_offset ;
  69. }
  70. unsigned long PackageFileHead::GetDataOffset()
  71. {
  72. return m_FileHeadInfo.data_offset;
  73. }
  74. }