Mercurial > hg > piper-cpp
comparison 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 |
comparison
equal
deleted
inserted
replaced
32:2d97883d20df | 33:0b48b10140bb |
---|---|
215 | 215 |
216 cout << j.dump() << endl; | 216 cout << j.dump() << endl; |
217 } | 217 } |
218 | 218 |
219 RequestOrResponse | 219 RequestOrResponse |
220 readRequestCapnp() | 220 readRequestCapnp(kj::BufferedInputStreamWrapper &buffered) |
221 { | 221 { |
222 RequestOrResponse rr; | 222 RequestOrResponse rr; |
223 rr.direction = RequestOrResponse::Request; | 223 rr.direction = RequestOrResponse::Request; |
224 | 224 |
225 ::capnp::PackedFdMessageReader message(0); // stdin | 225 ::capnp::InputStreamMessageReader message(buffered); |
226 VampRequest::Reader reader = message.getRoot<VampRequest>(); | 226 VampRequest::Reader reader = message.getRoot<VampRequest>(); |
227 | 227 |
228 rr.type = VampnProto::getRequestResponseType(reader); | 228 rr.type = VampnProto::getRequestResponseType(reader); |
229 | 229 |
230 switch (rr.type) { | 230 switch (rr.type) { |
278 break; | 278 break; |
279 case RRType::NotValid: | 279 case RRType::NotValid: |
280 break; | 280 break; |
281 } | 281 } |
282 | 282 |
283 writePackedMessageToFd(1, message); | 283 writeMessageToFd(1, message); |
284 } | 284 } |
285 | 285 |
286 RequestOrResponse | 286 RequestOrResponse |
287 readResponseCapnp() | 287 readResponseCapnp(kj::BufferedInputStreamWrapper &buffered) |
288 { | 288 { |
289 RequestOrResponse rr; | 289 RequestOrResponse rr; |
290 rr.direction = RequestOrResponse::Response; | 290 rr.direction = RequestOrResponse::Response; |
291 | 291 |
292 ::capnp::PackedFdMessageReader message(0); // stdin | 292 ::capnp::InputStreamMessageReader message(buffered); |
293 VampResponse::Reader reader = message.getRoot<VampResponse>(); | 293 VampResponse::Reader reader = message.getRoot<VampResponse>(); |
294 | 294 |
295 rr.type = VampnProto::getRequestResponseType(reader); | 295 rr.type = VampnProto::getRequestResponseType(reader); |
296 | 296 |
297 switch (rr.type) { | 297 switch (rr.type) { |
344 break; | 344 break; |
345 case RRType::NotValid: | 345 case RRType::NotValid: |
346 break; | 346 break; |
347 } | 347 } |
348 | 348 |
349 writePackedMessageToFd(1, message); | 349 writeMessageToFd(1, message); |
350 } | |
351 | |
352 RequestOrResponse | |
353 readInputJson(RequestOrResponse::Direction direction) | |
354 { | |
355 if (direction == RequestOrResponse::Request) { | |
356 return readRequestJson(); | |
357 } else { | |
358 return readResponseJson(); | |
359 } | |
360 } | |
361 | |
362 RequestOrResponse | |
363 readInputCapnp(RequestOrResponse::Direction direction) | |
364 { | |
365 static kj::FdInputStream stream(0); // stdin | |
366 static kj::BufferedInputStreamWrapper buffered(stream); | |
367 | |
368 if (buffered.tryGetReadBuffer() == nullptr) { | |
369 return {}; | |
370 } | |
371 | |
372 if (direction == RequestOrResponse::Request) { | |
373 return readRequestCapnp(buffered); | |
374 } else { | |
375 return readResponseCapnp(buffered); | |
376 } | |
350 } | 377 } |
351 | 378 |
352 RequestOrResponse | 379 RequestOrResponse |
353 readInput(string format, RequestOrResponse::Direction direction) | 380 readInput(string format, RequestOrResponse::Direction direction) |
354 { | 381 { |
355 if (format == "json") { | 382 if (format == "json") { |
356 if (direction == RequestOrResponse::Request) { | 383 return readInputJson(direction); |
357 return readRequestJson(); | |
358 } else { | |
359 return readResponseJson(); | |
360 } | |
361 } else if (format == "capnp") { | 384 } else if (format == "capnp") { |
362 if (direction == RequestOrResponse::Request) { | 385 return readInputCapnp(direction); |
363 return readRequestCapnp(); | |
364 } else { | |
365 return readResponseCapnp(); | |
366 } | |
367 } else { | 386 } else { |
368 throw runtime_error("unknown input format \"" + format + "\""); | 387 throw runtime_error("unknown input format \"" + format + "\""); |
369 } | 388 } |
370 } | 389 } |
371 | 390 |