root / trunk / code / projects / colonet / server / includes / ConnectionPool.h @ 518
History | View | Annotate | Download (1.72 KB)
1 | 11 | emarinel | /**
|
---|---|---|---|
2 | * @author Jason Knichel
|
||
3 | * @date 7/22/07
|
||
4 | */
|
||
5 | |||
6 | #ifndef CONNECTION_POOL_H
|
||
7 | #define CONNECTION_POOL_H
|
||
8 | |||
9 | #include <sys/select.h> |
||
10 | |||
11 | 22 | jknichel | #include <colonet_wireless.h> |
12 | 453 | emarinel | #include <ColonetServer.h> |
13 | 22 | jknichel | |
14 | 11 | emarinel | #define MAX_TOKENS 15 |
15 | #define MAX_TOKEN_SIZE 30 |
||
16 | |||
17 | #define ROBOT_COMMAND_OFFSET 1 |
||
18 | #define ROBOT_COMMAND_LEN 3 |
||
19 | |||
20 | #define ERROR_INVALID_CLIENT_DESCRIPTOR -1 |
||
21 | #define ERROR_TOO_MANY_CLIENTS -2 |
||
22 | #define ERROR_ALLOCATING_MEMORY -3 |
||
23 | 22 | jknichel | #define ERROR_NOT_ENOUGH_ROOM -4 |
24 | #define ERROR_INVALID_COMMAND -5 |
||
25 | #define ERROR_INVALID_CLIENT_ID -6 |
||
26 | #define ERROR_INVALID_MESSAGE -7 |
||
27 | #define ERROR_INVALID_MESSAGE_LENGTH -8 |
||
28 | 11 | emarinel | |
29 | 145 | jknichel | #define DECREMENT_INDEX_COUNTER 1 |
30 | |||
31 | 11 | emarinel | #define MAX_CONNECTIONS 250 |
32 | #define READ_BUFFER_SIZE 1024 |
||
33 | 75 | jknichel | #define WRITE_BUFFER_SIZE 4096 |
34 | 11 | emarinel | |
35 | 453 | emarinel | class ColonetServer; |
36 | |||
37 | 11 | emarinel | class ConnectionPool { |
38 | |||
39 | public:
|
||
40 | 453 | emarinel | ConnectionPool(ColonetServer* cs); |
41 | 11 | emarinel | ~ConnectionPool(); |
42 | |||
43 | int add_client(int client_file_descriptor); |
||
44 | 27 | jknichel | int remove_client(int pool_index); |
45 | 118 | emarinel | int check_clients();
|
46 | 143 | jknichel | |
47 | 14 | jknichel | int write_to_client(int pool_index, char * message, int length); |
48 | 143 | jknichel | void add_new_socket_to_pool(int new_socket); |
49 | 58 | jknichel | int perform_select(int listen_socket); |
50 | 11 | emarinel | int is_socket_ready_to_read(int socket); |
51 | int get_number_clients_ready();
|
||
52 | |||
53 | private:
|
||
54 | int max_file_descriptor;
|
||
55 | int next_available_slot;
|
||
56 | int number_clients_ready;
|
||
57 | fd_set ready_set; |
||
58 | fd_set read_set; |
||
59 | fd_set write_set; |
||
60 | int client_file_descriptor_array[MAX_CONNECTIONS];
|
||
61 | char * read_buffer[MAX_CONNECTIONS];
|
||
62 | int read_buffer_size[MAX_CONNECTIONS];
|
||
63 | char * write_buffer[MAX_CONNECTIONS];
|
||
64 | int write_buffer_size[MAX_CONNECTIONS];
|
||
65 | 453 | emarinel | ColonetServer* colonet_server; |
66 | 11 | emarinel | |
67 | 145 | jknichel | int read_data(int pool_index, int client_file_descriptor); |
68 | int write_data(int pool_index, int client_file_descriptor); |
||
69 | 11 | emarinel | }; |
70 | |||
71 | #endif |