response.h
上传用户:egreat
上传日期:2007-07-13
资源大小:29k
文件大小:2k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. #ifndef _RESPONSE_H
  2. #define _RESPONSE_H
  3. #include <set>
  4. #include <map>
  5. #include <boost/thread/thread.hpp>
  6. #include <boost/thread/recursive_mutex.hpp>
  7. #include <loki/singleton.h>
  8. #include <loki/Factory.h>
  9. namespace StockMarket
  10. {
  11. using namespace std;
  12. using namespace boost;
  13. using namespace Loki;
  14. extern recursive_mutex res_fact_mutex;
  15. typedef set<string> StringSet;
  16. typedef map <int, StringSet> IntStringSetMap; // 股票板块列表
  17. class StockRes
  18. {
  19. public:
  20. StockRes();
  21. StockRes(uchar* pData, ulong data_len);
  22. virtual ~StockRes();
  23. uint read(const uchar* pData, ulong data_len);
  24. ulong buff_left();
  25. bool end();
  26. void reset();
  27. virtual void operator()() = 0;
  28. ushort get_packet_len();
  29. static ushort get_packet_len(const uchar*);
  30. uint get_seq_id();
  31. static uint get_seq_id(const uchar*);
  32. ushort get_cmd_id();
  33. static ushort get_cmd_id(const uchar*);
  34. protected:
  35. void skip_byte(ulong count);
  36. void skip_data(ulong count);
  37. char get_char();
  38. uchar get_uchar();
  39. short get_short();
  40. ushort get_ushort();
  41. int  get_int();
  42. uint  get_uint();
  43. float get_float();
  44. int parse_data();
  45. int parse_data2();
  46. protected:
  47. const uchar* raw_data; // the raw data passed in 
  48. ulong raw_len; // the raw data len
  49. const uchar* data; // payload data, 
  50. ulong len; // payload len
  51. const uchar* current; // pointer to parse
  52. ulong left; // len left unparsed
  53. private:
  54. void umcompress_if();
  55. bool  dataNew;
  56. };
  57. class StockHeartBeatRes: public StockRes
  58. {
  59. public:
  60. void operator()();
  61. };
  62. class StockListRes: public StockRes
  63. {
  64. public:
  65. StockListRes();
  66. StockListRes(uchar* pData, ulong data_len);
  67. void operator()();
  68. };
  69. class StockHoldChgRes: public StockRes
  70. {
  71. public:
  72. StockHoldChgRes();
  73. StockHoldChgRes(uchar* pData, ulong data_len);
  74. void operator()();
  75. private:
  76. };
  77. typedef Factory< StockRes, int > RespFct_t;
  78. typedef SingletonHolder<RespFct_t> ResponseFactory;
  79. struct StockResWrongData : public std::exception
  80. {
  81. StockResWrongData(int i = 0);
  82. virtual const char *what( ) const throw();
  83. int n_;
  84. };
  85. extern  void ProcessResponsePacket(const uchar * pData , size_t len, bool test);
  86. extern StockRes* CreateStockListRes();
  87. extern StockRes* CreateStockHoldChgRes();
  88. extern StockRes* CreateStockHeartBeatRes();
  89. }
  90. #endif