提交 08cbfb79c8e9e5e181dae8d17c21575d30f8278a

作者 LJH 李佳桓
1 个父辈 906a21ee

add

正在显示 1 个修改的文件 包含 122 行增加0 行删除
  1 +/*
  2 + * Copyright 2007 Stephen Liu
  3 + * For license terms, see the file COPYING along with this library.
  4 + */
  5 +
  6 +
  7 +#ifndef __spsession_hpp__
  8 +#define __spsession_hpp__
  9 +
  10 +#include "spresponse.hpp"
  11 +
  12 +class SP_Handler;
  13 +class SP_Buffer;
  14 +class SP_Session;
  15 +class SP_ArrayList;
  16 +class SP_Request;
  17 +class SP_IOChannel;
  18 +
  19 +struct event;
  20 +
  21 +class SP_Session {
  22 +public:
  23 + SP_Session( SP_Sid_t sid );
  24 + virtual ~SP_Session();
  25 +
  26 + struct event * getReadEvent();
  27 + struct event * getWriteEvent();
  28 +
  29 + void setHandler( SP_Handler * handler );
  30 + SP_Handler * getHandler();
  31 +
  32 + void setArg( void * arg );
  33 + void * getArg();
  34 +
  35 + SP_Sid_t getSid();
  36 +
  37 + SP_Buffer * getInBuffer();
  38 + SP_Request * getRequest();
  39 +
  40 + void setOutOffset( int offset );
  41 + int getOutOffset();
  42 + SP_ArrayList * getOutList();
  43 +
  44 + enum { eNormal, eWouldExit, eExit };
  45 + void setStatus( int status );
  46 + int getStatus();
  47 +
  48 + int getRunning();
  49 + void setRunning( int running );
  50 +
  51 + int getReading();
  52 + void setReading( int reading );
  53 +
  54 + int getWriting();
  55 + void setWriting( int writing );
  56 +
  57 + SP_IOChannel * getIOChannel();
  58 + void setIOChannel( SP_IOChannel * ioChannel );
  59 +
  60 + unsigned int getTotalRead();
  61 + void addRead( int len );
  62 +
  63 + unsigned int getTotalWrite();
  64 + void addWrite( int len );
  65 +
  66 +private:
  67 +
  68 + SP_Session( SP_Session & );
  69 + SP_Session & operator=( SP_Session & );
  70 +
  71 + SP_Sid_t mSid;
  72 +
  73 + struct event * mReadEvent;
  74 + struct event * mWriteEvent;
  75 +
  76 + SP_Handler * mHandler;
  77 + void * mArg;
  78 +
  79 + SP_Buffer * mInBuffer;
  80 + SP_Request * mRequest;
  81 +
  82 + int mOutOffset;
  83 + SP_ArrayList * mOutList;
  84 +
  85 + char mStatus;
  86 + char mRunning;
  87 + char mWriting;
  88 + char mReading;
  89 +
  90 + unsigned int mTotalRead, mTotalWrite;
  91 +
  92 + SP_IOChannel * mIOChannel;
  93 +};
  94 +
  95 +typedef struct tagSP_SessionEntry SP_SessionEntry_t;
  96 +
  97 +class SP_SessionManager {
  98 +public:
  99 + SP_SessionManager();
  100 + ~SP_SessionManager();
  101 +
  102 + int getCount();
  103 + void put( uint16_t key, uint16_t seq, SP_Session * session );
  104 + SP_Session * get( uint16_t key, uint16_t * seq );
  105 + SP_Session * remove( uint16_t key, uint16_t seq );
  106 +
  107 + int getFreeCount();
  108 + // > 0 : OK, 0 : out of memory
  109 + uint16_t allocKey( uint16_t * seq );
  110 +
  111 +private:
  112 + enum { eColPerRow = 1024 };
  113 +
  114 + int mCount;
  115 + SP_SessionEntry_t * mArray[ 64 ];
  116 +
  117 + int mFreeCount;
  118 + uint16_t mFreeList;
  119 +};
  120 +
  121 +#endif
  122 +
... ...
注册登录 后发表评论