client.h
1.24 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
#ifndef CLIENT_H
#define CLIENT_H
#include <fcntl.h>
#include <unistd.h>
#include "threaddata.h"
#define CLIENT_BUFFER_SIZE 16
class ThreadData;
typedef std::shared_ptr<ThreadData> ThreadData_p;
class Client
{
int fd;
char *readbuf = NULL; // With many clients, it may not be smart to keep a (big) buffer around.
size_t bufsize = CLIENT_BUFFER_SIZE;
int wi = 0;
int ri = 0;
ThreadData_p threadData;
size_t getBufBytesUsed()
{
size_t result = 0;
if (wi >= ri)
result = wi - ri;
else
result = (bufsize + wi) - ri;
};
size_t getMaxWriteSize()
{
size_t available = bufsize - getBufBytesUsed();
size_t space_at_end = bufsize - wi;
size_t answer = std::min<int>(available, space_at_end);
return answer;
}
size_t getMaxReadSize()
{
size_t available = getBufBytesUsed();
size_t space_to_end = bufsize - ri;
size_t answer = std::min<int>(available, space_to_end);
return answer;
}
public:
Client(int fd, ThreadData_p threadData);
~Client();
int getFd() { return fd;}
bool readFdIntoBuffer();
void writeTest();
};
typedef std::shared_ptr<Client> Client_p;
#endif // CLIENT_H