00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef _CAVERNPLUS_PERF_DAEMON_C
00017 #define _CAVERNPLUS_PERF_DAEMON_C
00018
00019 #include <stdio.h>
00020
00021 #include "CAVERNnet_perfClient_c.hxx"
00022
00023 class CAVERNnet_tcpServer_c;
00024
00025 struct PerfDaemonClient
00026 {
00027 CAVERNnet_perfDaemonClient_c *Client;
00028 int IsPerfClient;
00029 int Started;
00030 };
00031
00051 class CAVERNnet_perfDaemon_c
00052 {
00053 public:
00061 CAVERNnet_perfDaemon_c(FILE* File = NULL);
00062 ~CAVERNnet_perfDaemon_c();
00063
00065
00066 static const int OK;
00067
00069 static const int FAILED;
00070
00072 static const int MEM_ALLOC_ERR;
00073
00075 static const int NEW_CONNECTION_ESTABLISHED;
00076
00078 static const int TOO_MANY_CLIENTS;
00079
00081 static const int NO_NEW_CONNECTION;
00082
00084 static const int NON_BLOCKING_HAS_NO_DATA;
00085
00087 static const int SKIP_DISTRIBUTION;
00088
00089 static const int DEFAULT_PORT;
00091
00097 int init(int incomingPort=PERF_DAEMON_DEFAULT_PORT, int maxClients = 64);
00098
00103 int process();
00104
00112 int checkForNewClients();
00113
00130 void intercept(int (*callback) (CAVERNnet_perfDaemonClient_c *client, char** buffer,
00131 int *bufferSize, void *userData), void* userData);
00132
00139 void interceptNewConnection(void (*callback) (CAVERNnet_perfDaemonClient_c *newClient, void* userData), void *userData);
00140
00141 int sendToAll(char* buf, int incomingSize);
00142
00143 private:
00144 PerfDaemonClient **clients;
00145 CAVERNnet_tcpServer_c *server;
00146 unsigned short incomingPort;
00147 FILE* LogFile;
00148
00149 int (*interceptCallback) (CAVERNnet_perfDaemonClient_c *newClient, char** buffer,
00150 int* bufsize, void *userData);
00151 void *interceptUserData;
00152
00153 void (*interceptNewConnectionCallback) (CAVERNnet_perfDaemonClient_c *newClient, void *userData);
00154 void *interceptNewConnectionUserData;
00155
00156
00157
00158 int distributeDataToPerfClients(char* buf, int incomingSize);
00159
00160
00161 void removeClient(int clientNum);
00162
00163
00164
00165 void closeDownSockets();
00166 int maxNumClients;
00167 };
00168
00169 #endif