Mercurial > hg > piper-cpp
diff utilities/vampipe-convert.cpp @ 33:0b48b10140bb
Switch to non-packed protocol and handle multiple messages and EOF properly; fill in remaining server actions
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Wed, 25 May 2016 10:43:07 +0100 |
parents | 2d97883d20df |
children | 91f5c92d3bf7 |
line wrap: on
line diff
--- a/utilities/vampipe-convert.cpp Tue May 24 17:17:03 2016 +0100 +++ b/utilities/vampipe-convert.cpp Wed May 25 10:43:07 2016 +0100 @@ -217,12 +217,12 @@ } RequestOrResponse -readRequestCapnp() +readRequestCapnp(kj::BufferedInputStreamWrapper &buffered) { RequestOrResponse rr; rr.direction = RequestOrResponse::Request; - ::capnp::PackedFdMessageReader message(0); // stdin + ::capnp::InputStreamMessageReader message(buffered); VampRequest::Reader reader = message.getRoot<VampRequest>(); rr.type = VampnProto::getRequestResponseType(reader); @@ -280,16 +280,16 @@ break; } - writePackedMessageToFd(1, message); + writeMessageToFd(1, message); } RequestOrResponse -readResponseCapnp() +readResponseCapnp(kj::BufferedInputStreamWrapper &buffered) { RequestOrResponse rr; rr.direction = RequestOrResponse::Response; - ::capnp::PackedFdMessageReader message(0); // stdin + ::capnp::InputStreamMessageReader message(buffered); VampResponse::Reader reader = message.getRoot<VampResponse>(); rr.type = VampnProto::getRequestResponseType(reader); @@ -346,24 +346,43 @@ break; } - writePackedMessageToFd(1, message); + writeMessageToFd(1, message); +} + +RequestOrResponse +readInputJson(RequestOrResponse::Direction direction) +{ + if (direction == RequestOrResponse::Request) { + return readRequestJson(); + } else { + return readResponseJson(); + } +} + +RequestOrResponse +readInputCapnp(RequestOrResponse::Direction direction) +{ + static kj::FdInputStream stream(0); // stdin + static kj::BufferedInputStreamWrapper buffered(stream); + + if (buffered.tryGetReadBuffer() == nullptr) { + return {}; + } + + if (direction == RequestOrResponse::Request) { + return readRequestCapnp(buffered); + } else { + return readResponseCapnp(buffered); + } } RequestOrResponse readInput(string format, RequestOrResponse::Direction direction) { if (format == "json") { - if (direction == RequestOrResponse::Request) { - return readRequestJson(); - } else { - return readResponseJson(); - } + return readInputJson(direction); } else if (format == "capnp") { - if (direction == RequestOrResponse::Request) { - return readRequestCapnp(); - } else { - return readResponseCapnp(); - } + return readInputCapnp(direction); } else { throw runtime_error("unknown input format \"" + format + "\""); }