aboutsummaryrefslogtreecommitdiff
path: root/src/server.cpp
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2007-05-17 05:56:26 +0000
committerMike Buland <eichlan@xagasoft.com>2007-05-17 05:56:26 +0000
commite0e7932a122614a0ff566fbfd8de5776de8b9f6d (patch)
treeae87ab46b677bfd05f340051a56f1edbc94862a9 /src/server.cpp
parentdda94f3b53e02e117e6eb5758afa1410e1664c9f (diff)
downloadlibbu++-e0e7932a122614a0ff566fbfd8de5776de8b9f6d.tar.gz
libbu++-e0e7932a122614a0ff566fbfd8de5776de8b9f6d.tar.bz2
libbu++-e0e7932a122614a0ff566fbfd8de5776de8b9f6d.tar.xz
libbu++-e0e7932a122614a0ff566fbfd8de5776de8b9f6d.zip
Lots of cool new stuff, the Server class actually works for everything except
actually interacting with clients, and the Client class is almost there, except that it doesn't really do anything yet.
Diffstat (limited to 'src/server.cpp')
-rw-r--r--src/server.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/server.cpp b/src/server.cpp
new file mode 100644
index 0000000..f93238c
--- /dev/null
+++ b/src/server.cpp
@@ -0,0 +1,73 @@
1#include "server.h"
2#include <errno.h>
3
4Bu::Server::Server() :
5 nTimeoutSec( 0 ),
6 nTimeoutUSec( 0 )
7{
8 FD_ZERO( &fdActive );
9}
10
11Bu::Server::~Server()
12{
13}
14
15void Bu::Server::addPort( int nPort, int nPoolSize )
16{
17 ServerSocket *s = new ServerSocket( nPort, nPoolSize );
18 int nSocket = s->getSocket();
19 FD_SET( nSocket, &fdActive );
20 hServers.insert( nSocket, s );
21}
22
23void Bu::Server::addPort( const FString &sAddr, int nPort, int nPoolSize )
24{
25 ServerSocket *s = new ServerSocket( sAddr, nPort, nPoolSize );
26 int nSocket = s->getSocket();
27 FD_SET( nSocket, &fdActive );
28 hServers.insert( nSocket, s );
29}
30
31void Bu::Server::setTimeout( int nTimeoutSec, int nTimeoutUSec )
32{
33 this->nTimeoutSec = nTimeoutSec;
34 this->nTimeoutUSec = nTimeoutUSec;
35}
36
37void Bu::Server::scan()
38{
39 struct timeval xTimeout = { nTimeoutSec, nTimeoutUSec };
40
41 fd_set fdRead = fdActive;
42 fd_set fdWrite = fdActive;
43 fd_set fdException = fdActive;
44
45 if( TEMP_FAILURE_RETRY( select( FD_SETSIZE, &fdRead, NULL, &fdException, &xTimeout ) ) < 0 )
46 {
47 throw ExceptionBase("Error attempting to scan open connections.");
48 }
49
50 for( int j = 0; j < FD_SETSIZE; j++ )
51 {
52 if( FD_ISSET( j, &fdRead ) )
53 {
54 if( hServers.has( j ) )
55 {
56 addClient( hServers.get( j )->accept() );
57 }
58 else
59 {
60
61 }
62 }
63 }
64}
65
66void Bu::Server::addClient( int nSocket )
67{
68 FD_SET( nSocket, &fdActive );
69
70 Client *c = new Client();
71 hClients.insert( nSocket, c );
72}
73