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