提交 d25c545714bb7e05c26d0c86a08275dbb6639afb

作者 LJH 李佳桓
1 个父辈 e3fcb84b

add

正在显示 1 个修改的文件 包含 100 行增加0 行删除
  1 +/*
  2 + * Copyright 2007 Stephen Liu
  3 + * For license terms, see the file COPYING along with this library.
  4 + */
  5 +
  6 +#ifndef __spmsgdecoder_hpp__
  7 +#define __spmsgdecoder_hpp__
  8 +
  9 +class SP_Buffer;
  10 +
  11 +class SP_MsgDecoder {
  12 +public:
  13 + virtual ~SP_MsgDecoder();
  14 +
  15 + enum { eOK, eMoreData };
  16 +
  17 + virtual int decode( SP_Buffer * inBuffer ) = 0;
  18 +};
  19 +
  20 +class SP_DefaultMsgDecoder : public SP_MsgDecoder {
  21 +public:
  22 + SP_DefaultMsgDecoder();
  23 + virtual ~SP_DefaultMsgDecoder();
  24 +
  25 + // always return SP_MsgDecoder::eOK, move buffer from inBuffer to mBuffer
  26 + virtual int decode( SP_Buffer * inBuffer );
  27 +
  28 + SP_Buffer * getMsg();
  29 +
  30 +private:
  31 + SP_Buffer * mBuffer;
  32 +};
  33 +
  34 +class SP_LineMsgDecoder : public SP_MsgDecoder {
  35 +public:
  36 + SP_LineMsgDecoder();
  37 + virtual ~SP_LineMsgDecoder();
  38 +
  39 + // return SP_MsgDecoder::eMoreData until meet <CRLF>
  40 + virtual int decode( SP_Buffer * inBuffer );
  41 +
  42 + const char * getMsg();
  43 +
  44 +private:
  45 + char * mLine;
  46 +};
  47 +
  48 +class SP_CircleQueue;
  49 +
  50 +class SP_MultiLineMsgDecoder : public SP_MsgDecoder {
  51 +public:
  52 + SP_MultiLineMsgDecoder();
  53 + ~SP_MultiLineMsgDecoder();
  54 +
  55 + // return SP_MsgDecoder::eMoreData until meet <CRLF>
  56 + virtual int decode( SP_Buffer * inBuffer );
  57 +
  58 + SP_CircleQueue * getQueue();
  59 +
  60 +private:
  61 + SP_CircleQueue * mQueue;
  62 +};
  63 +
  64 +class SP_DotTermMsgDecoder : public SP_MsgDecoder {
  65 +public:
  66 + SP_DotTermMsgDecoder();
  67 + virtual ~SP_DotTermMsgDecoder();
  68 +
  69 + // return SP_MsgDecoder::eMoreData until meet <CRLF>.<CRLF>
  70 + virtual int decode( SP_Buffer * inBuffer );
  71 +
  72 + const char * getMsg();
  73 +
  74 +private:
  75 + char * mBuffer;
  76 +};
  77 +
  78 +class SP_ArrayList;
  79 +
  80 +class SP_DotTermChunkMsgDecoder : public SP_MsgDecoder {
  81 +public:
  82 +
  83 + enum { MAX_SIZE_PER_CHUNK = 1024 * 64 };
  84 +
  85 +public:
  86 + SP_DotTermChunkMsgDecoder();
  87 + virtual ~SP_DotTermChunkMsgDecoder();
  88 +
  89 + // return SP_MsgDecoder::eMoreData until meet <CRLF>.<CRLF>
  90 + virtual int decode( SP_Buffer * inBuffer );
  91 +
  92 + // caller need to free return value
  93 + char * getMsg();
  94 +
  95 +private:
  96 + SP_ArrayList * mList;
  97 +};
  98 +
  99 +#endif
  100 +
... ...
注册登录 后发表评论