00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <iostream>
00019 #include "EchoServer.h"
00020 #include "SocketBuilder.h"
00021 #include "Message.h"
00022
00023 using namespace CODEX_Quorum;
00024
00025 EchoServer::~EchoServer()
00026 {
00027 }
00028
00029
00030 void
00031 EchoServer::processRequest( SocketBase::StateType s )
00032 {
00033 SocketBase* skt;
00034 switch(s)
00035 {
00036 case SocketBase::kRead :
00037 skt = socket()->accept();
00038 while(1)
00039 {
00040 fd_set read_set;
00041 FD_ZERO(&read_set);
00042 int snum = skt->set_fd(&read_set, s);
00043 select(snum+1,&read_set,0,0,0);
00044 if ( skt->isset_fd( &read_set, s ) )
00045 {
00046 unsigned char buffer[1025];
00047 int n = skt->readFrom( buffer, 1024 );
00048 if ( 0 == n )
00049 {
00050 cout << "closing connection" << endl;
00051 delete skt;
00052 return;
00053 }
00054
00055 Message m(buffer,n);
00056 skt->writeTo( m );
00057 buffer[n] = '\0';
00058
00059 cout << buffer << flush;
00060 }
00061 }
00062 break;
00063 case SocketBase::kWrite :
00064 break;
00065 case SocketBase::kError :
00066 break;
00067 }
00068 }