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

模拟服务器

开发平台:

C/C++

  1. #ifndef PACKAGE_H
  2. #define PACKAGE_H
  3. #include "xbuffer.h"
  4. #define MAX_CID 256
  5. class CPackager {
  6. public:
  7. char *data_ptr[MAX_CID];
  8. int data_size[MAX_CID];
  9. char *send_data_ptr[MAX_CID];
  10. char *pack_data_ptr[MAX_CID];
  11. int send_data_size[MAX_CID];
  12. int split_pos[MAX_CID];
  13. int pack_len[MAX_CID];
  14. int pack_data_size[MAX_CID];
  15. unsigned long user_data[MAX_CID];
  16. public:
  17. CPackager() {
  18. memset(&data_ptr[0], 0, MAX_CID * sizeof(char *));
  19. memset(data_size, 0, MAX_CID * sizeof(int));
  20. memset(&send_data_ptr[0], 0, MAX_CID * sizeof(char *));
  21. memset(&pack_data_ptr[0], 0, MAX_CID * sizeof(char *));
  22. memset(split_pos, 0, MAX_CID * sizeof(int));
  23. memset(pack_len, 0, MAX_CID * sizeof(int));
  24. memset(send_data_size, 0, MAX_CID * sizeof(int));
  25. memset(pack_data_size, 0, MAX_CID * sizeof(int));
  26. }
  27. ~CPackager() {
  28. int index;
  29. for(index = 0; index < MAX_CID; index++) {
  30. if(data_ptr[index]) delete[] data_ptr[index];
  31. }
  32. for(index = 0; index < MAX_CID; index++) {
  33. if(send_data_ptr[index]) delete[] send_data_ptr[index];
  34. }
  35. for(index = 0; index < MAX_CID; index++) {
  36. if(pack_data_ptr[index]) delete[] pack_data_ptr[index];
  37. }
  38. }
  39. char *getpackdata(unsigned char cID)
  40. {
  41. #define PACK_DATA_INIT_SIZE 1024
  42. size_t datalen = pack_len[cID] + 16;
  43. if (pack_data_size[cID] >= datalen)
  44. return pack_data_ptr[cID];
  45. //realloc
  46. if (pack_data_ptr[cID])
  47. delete pack_data_ptr[cID];
  48. pack_data_size[cID] = PACK_DATA_INIT_SIZE > datalen ? PACK_DATA_INIT_SIZE : datalen;
  49. pack_data_ptr[cID] = new char[pack_data_size[cID]];
  50. return pack_data_ptr[cID];
  51. }
  52. char *PackUp(const void *data, int size);
  53. /*
  54.  * Send
  55.  */
  56. char *GetHeadPack( BYTE cID, size_t& actualLength, size_t packLength = 512 );
  57. char *GetNextPack( BYTE cID, size_t& actualLength);
  58. void AddData( BYTE cID, const char * const pData, size_t dataLength, unsigned long lnUserData = 0 );
  59. void AddData( BYTE cID, const BYTE * const pData, size_t dataLength, unsigned long lnUserData = 0 )
  60. {
  61. AddData( cID, reinterpret_cast< const char * >( pData ), dataLength, lnUserData );
  62. }
  63. void DelData( BYTE cID );
  64. };
  65. #define MAX_PACKAGE 65500
  66. #endif