blob: 9069c91bd2a4497f9e1e8601ea98e2469a63593b [file] [log] [blame]
#include "TSimpleClient.h"
using std::string;
TSimpleClient::TSimpleClient(TTransport* transport) :
transport_(transport) {}
bool TSimpleClient::open() {
return transport_->open();
}
void TSimpleClient::close() {
transport_->close();
}
std::string TSimpleClient::dispatch(const string& s) {
// Write size header
int32_t size = s.size();
// fprintf(stderr, "Writing size header %d to server\n", size);
transport_->write(string((char*)&size, 4));
// Write data payload
// fprintf(stderr, "Writing %d byte payload to server\n", (int)s.size());
transport_->write(s);
// Read response size
// fprintf(stderr, "Reading 4-byte response size header\n");
string response;
transport_->read(response, 4);
size = *(int32_t*)response.data();
// Read response data
if (size < 0) {
// TODO(mcslee): Handle exception
// fprintf(stderr, "Exception case! Response size < 0\n");
return "";
} else {
// fprintf(stderr, "Reading %d byte response payload\n", size);
transport_->read(response, size);
// TODO(mcslee): Check that we actually read enough data
// fprintf(stderr, "Done reading payload, returning.\n");
return response;
}
}