Mark Slee | e854063 | 2006-05-30 09:24:40 +0000 | [diff] [blame^] | 1 | #include "TSimpleClient.h" |
| 2 | using std::string; |
| 3 | |
| 4 | TSimpleClient::TSimpleClient(TTransport* transport) : |
| 5 | transport_(transport) {} |
| 6 | |
| 7 | bool TSimpleClient::open() { |
| 8 | return transport_->open(); |
| 9 | } |
| 10 | |
| 11 | void TSimpleClient::close() { |
| 12 | transport_->close(); |
| 13 | } |
| 14 | |
| 15 | std::string TSimpleClient::dispatch(const string& s) { |
| 16 | // Write size header |
| 17 | int32_t size = s.size(); |
| 18 | // fprintf(stderr, "Writing size header %d to server\n", size); |
| 19 | transport_->write(string((char*)&size, 4)); |
| 20 | |
| 21 | // Write data payload |
| 22 | // fprintf(stderr, "Writing %d byte payload to server\n", (int)s.size()); |
| 23 | transport_->write(s); |
| 24 | |
| 25 | // Read response size |
| 26 | // fprintf(stderr, "Reading 4-byte response size header\n"); |
| 27 | string response; |
| 28 | transport_->read(response, 4); |
| 29 | size = *(int32_t*)response.data(); |
| 30 | |
| 31 | // Read response data |
| 32 | if (size < 0) { |
| 33 | // TODO(mcslee): Handle exception |
| 34 | // fprintf(stderr, "Exception case! Response size < 0\n"); |
| 35 | return ""; |
| 36 | } else { |
| 37 | // fprintf(stderr, "Reading %d byte response payload\n", size); |
| 38 | transport_->read(response, size); |
| 39 | // TODO(mcslee): Check that we actually read enough data |
| 40 | // fprintf(stderr, "Done reading payload, returning.\n"); |
| 41 | return response; |
| 42 | } |
| 43 | } |
| 44 | |