diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/atom.h | 2 | ||||
| -rw-r--r-- | src/client.cpp | 25 | ||||
| -rw-r--r-- | src/client.h | 6 | ||||
| -rw-r--r-- | src/server.cpp | 17 | ||||
| -rw-r--r-- | src/server.h | 3 |
5 files changed, 50 insertions, 3 deletions
| @@ -27,7 +27,7 @@ namespace Bu | |||
| 27 | clear(); | 27 | clear(); |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | bool isSet() const | 30 | bool has() const |
| 31 | { | 31 | { |
| 32 | return (pData != NULL); | 32 | return (pData != NULL); |
| 33 | } | 33 | } |
diff --git a/src/client.cpp b/src/client.cpp index 6d7d81c..0e48285 100644 --- a/src/client.cpp +++ b/src/client.cpp | |||
| @@ -58,6 +58,15 @@ void Bu::Client::processInput() | |||
| 58 | } | 58 | } |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | void Bu::Client::processOutput() | ||
| 62 | { | ||
| 63 | if( sWriteBuf.getSize() > 0 ) | ||
| 64 | { | ||
| 65 | pSocket->write( sWriteBuf.getStr(), sWriteBuf.getSize() ); | ||
| 66 | sWriteBuf.clear(); | ||
| 67 | } | ||
| 68 | } | ||
| 69 | |||
| 61 | void Bu::Client::setProtocol( Protocol *pProto ) | 70 | void Bu::Client::setProtocol( Protocol *pProto ) |
| 62 | { | 71 | { |
| 63 | this->pProto = pProto; | 72 | this->pProto = pProto; |
| @@ -78,3 +87,19 @@ Bu::FString &Bu::Client::getInput() | |||
| 78 | return sReadBuf; | 87 | return sReadBuf; |
| 79 | } | 88 | } |
| 80 | 89 | ||
| 90 | Bu::FString &Bu::Client::getOutput() | ||
| 91 | { | ||
| 92 | return sWriteBuf; | ||
| 93 | } | ||
| 94 | |||
| 95 | bool Bu::Client::isOpen() | ||
| 96 | { | ||
| 97 | if( !pSocket ) return false; | ||
| 98 | return pSocket->isOpen(); | ||
| 99 | } | ||
| 100 | |||
| 101 | void Bu::Client::write( const char *pData, int nBytes ) | ||
| 102 | { | ||
| 103 | sWriteBuf.append( pData, nBytes ); | ||
| 104 | } | ||
| 105 | |||
diff --git a/src/client.h b/src/client.h index 1a189e2..02ba077 100644 --- a/src/client.h +++ b/src/client.h | |||
| @@ -20,17 +20,23 @@ namespace Bu | |||
| 20 | virtual ~Client(); | 20 | virtual ~Client(); |
| 21 | 21 | ||
| 22 | void processInput(); | 22 | void processInput(); |
| 23 | void processOutput(); | ||
| 23 | 24 | ||
| 24 | Bu::FString &getInput(); | 25 | Bu::FString &getInput(); |
| 26 | Bu::FString &getOutput(); | ||
| 27 | void write( const char *pData, int nBytes ); | ||
| 25 | 28 | ||
| 26 | void setProtocol( Protocol *pProto ); | 29 | void setProtocol( Protocol *pProto ); |
| 27 | Bu::Protocol *getProtocol(); | 30 | Bu::Protocol *getProtocol(); |
| 28 | void clearProtocol(); | 31 | void clearProtocol(); |
| 29 | 32 | ||
| 33 | bool isOpen(); | ||
| 34 | |||
| 30 | private: | 35 | private: |
| 31 | Bu::Socket *pSocket; | 36 | Bu::Socket *pSocket; |
| 32 | Bu::Protocol *pProto; | 37 | Bu::Protocol *pProto; |
| 33 | Bu::FString sReadBuf; | 38 | Bu::FString sReadBuf; |
| 39 | Bu::FString sWriteBuf; | ||
| 34 | }; | 40 | }; |
| 35 | } | 41 | } |
| 36 | 42 | ||
diff --git a/src/server.cpp b/src/server.cpp index bceeb81..d07a597 100644 --- a/src/server.cpp +++ b/src/server.cpp | |||
| @@ -61,10 +61,25 @@ void Bu::Server::scan() | |||
| 61 | } | 61 | } |
| 62 | else | 62 | else |
| 63 | { | 63 | { |
| 64 | hClients.get( j )->processInput(); | 64 | Client *pClient = hClients.get( j ); |
| 65 | pClient->processInput(); | ||
| 66 | if( !pClient->isOpen() ) | ||
| 67 | { | ||
| 68 | onClosedConnection( pClient ); | ||
| 69 | hClients.erase( j ); | ||
| 70 | FD_CLR( j, &fdActive ); | ||
| 71 | } | ||
| 65 | } | 72 | } |
| 66 | } | 73 | } |
| 67 | } | 74 | } |
| 75 | |||
| 76 | // Now we just try to write all the pending data on all the sockets. | ||
| 77 | // this could be done better eventually, if we care about the socket | ||
| 78 | // wanting to accept writes (using a select). | ||
| 79 | for( ClientHash::iterator i = hClients.begin(); i != hClients.end(); i++ ) | ||
| 80 | { | ||
| 81 | (*i)->processOutput(); | ||
| 82 | } | ||
| 68 | } | 83 | } |
| 69 | 84 | ||
| 70 | void Bu::Server::addClient( int nSocket, int nPort ) | 85 | void Bu::Server::addClient( int nSocket, int nPort ) |
diff --git a/src/server.h b/src/server.h index 3331d2c..07eef95 100644 --- a/src/server.h +++ b/src/server.h | |||
| @@ -53,7 +53,8 @@ namespace Bu | |||
| 53 | int nTimeoutUSec; | 53 | int nTimeoutUSec; |
| 54 | fd_set fdActive; | 54 | fd_set fdActive; |
| 55 | Hash<int,ServerSocket *> hServers; | 55 | Hash<int,ServerSocket *> hServers; |
| 56 | Hash<int,Client *> hClients; | 56 | typedef Hash<int,Client *> ClientHash; |
| 57 | ClientHash hClients; | ||
| 57 | }; | 58 | }; |
| 58 | } | 59 | } |
| 59 | 60 | ||
