Continue work on Server base class.

This commit is contained in:
Jonathan Moore Liles 2008-03-25 13:50:10 -05:00
parent 93ce31ea03
commit fda03b174a
4 changed files with 26 additions and 14 deletions

View File

@ -31,6 +31,10 @@
#include <sys/select.h> #include <sys/select.h>
/* Generic TCP server class */ /* Generic TCP server class */
/* */
#define MAX_HOST_NAME 512 #define MAX_HOST_NAME 512
/** open a socket listening on TCP port /port/. Returns -1 in case of error. */ /** open a socket listening on TCP port /port/. Returns -1 in case of error. */
@ -154,21 +158,23 @@ Server::run ( void )
} }
else else
{ {
/* echo to others */
for ( int j = maxfd; j-- ; )
{
if ( ! FD_ISSET( j, &master ) )
continue;
if ( j != server && j != i ) if ( echos() )
/* echo to others */
for ( int j = maxfd; j-- ; )
{ {
if ( send( j, buf, l, 0 ) < 0 ) if ( ! FD_ISSET( j, &master ) )
perror( "send()" ); continue;
if ( j != server && j != i )
{
if ( send( j, buf, l, 0 ) < 0 )
perror( "send()" );
}
} }
}
buf[ l ] = '\0'; buf[ l ] = '\0';
handle_request( buf, l ); handle_request( i, buf, l );
} }
} }
} }

View File

@ -31,7 +31,9 @@ public:
protected: protected:
virtual bool echos ( void ) { return true; }
virtual void handle_hang_up ( int s ) = 0; virtual void handle_hang_up ( int s ) = 0;
virtual void handle_new ( int s ) = 0; virtual void handle_new ( int s ) = 0;
virtual void handle_request ( const char *s, int l ) = 0; virtual void handle_request ( int s, const char *s, int l ) = 0;
}; };

View File

@ -26,6 +26,8 @@
#include "Timeline_Server.H" #include "Timeline_Server.H"
#include <stdio.h> #include <stdio.h>
#include <string.h>
#include <sys/socket.h>
/* Timeline Server. /* Timeline Server.
@ -65,7 +67,9 @@ Timeline_Server::handle_hang_up ( int s )
} }
void void
Timeline_Server::handle_request ( const char *s, int l ) Timeline_Server::handle_request ( int s, const char *buf, int l )
{ {
printf( "request: %s", s ); printf( "request: %s", buf );
send( s, "fuckoff\n", strlen( "fuckoff\n" ), 0 );
} }

View File

@ -28,7 +28,7 @@ protected:
void handle_new ( int s ); void handle_new ( int s );
void handle_hang_up ( int s ); void handle_hang_up ( int s );
void handle_request ( const char *s, int l ); void handle_request ( int s, const char *s, int l );
public: public: