Mercurial > hg > piper-cpp
comparison utilities/vampipe-convert.cpp @ 29:7062a3bebaa3
Capnp writes
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Tue, 24 May 2016 14:09:58 +0100 |
parents | cc85c2851605 |
children | eb679afcd1bb |
comparison
equal
deleted
inserted
replaced
28:b5005ebc5116 | 29:7062a3bebaa3 |
---|---|
303 } | 303 } |
304 | 304 |
305 return rr; | 305 return rr; |
306 } | 306 } |
307 | 307 |
308 void | |
309 writeRequestCapnp(RequestOrResponse &rr) | |
310 { | |
311 ::capnp::MallocMessageBuilder message; | |
312 VampRequest::Builder builder = message.initRoot<VampRequest>(); | |
313 | |
314 switch (rr.type) { | |
315 | |
316 case RRType::List: | |
317 VampnProto::buildVampRequest_List(builder); | |
318 break; | |
319 case RRType::Load: | |
320 VampnProto::buildVampRequest_Load(builder, rr.loadRequest); | |
321 break; | |
322 case RRType::Configure: | |
323 VampnProto::buildVampRequest_Configure(builder, | |
324 rr.configurationRequest, | |
325 rr.mapper); | |
326 break; | |
327 case RRType::Process: | |
328 VampnProto::buildVampRequest_Process(builder, | |
329 rr.processRequest, | |
330 rr.mapper); | |
331 break; | |
332 case RRType::Finish: | |
333 VampnProto::buildVampRequest_Finish(builder, | |
334 rr.finishPlugin, | |
335 rr.mapper); | |
336 break; | |
337 case RRType::NotValid: | |
338 break; | |
339 } | |
340 | |
341 writePackedMessageToFd(1, message); | |
342 } | |
343 | |
308 RequestOrResponse | 344 RequestOrResponse |
309 readResponseCapnp() | 345 readResponseCapnp() |
310 { | 346 { |
311 RequestOrResponse rr; | 347 RequestOrResponse rr; |
312 rr.direction = RequestOrResponse::Response; | 348 rr.direction = RequestOrResponse::Response; |
337 case RRType::NotValid: | 373 case RRType::NotValid: |
338 break; | 374 break; |
339 } | 375 } |
340 | 376 |
341 return rr; | 377 return rr; |
378 } | |
379 | |
380 void | |
381 writeResponseCapnp(RequestOrResponse &rr) | |
382 { | |
383 ::capnp::MallocMessageBuilder message; | |
384 VampResponse::Builder builder = message.initRoot<VampResponse>(); | |
385 | |
386 switch (rr.type) { | |
387 | |
388 case RRType::List: | |
389 VampnProto::buildVampResponse_List(builder, "", rr.listResponse); | |
390 break; | |
391 case RRType::Load: | |
392 VampnProto::buildVampResponse_Load(builder, rr.loadResponse, rr.mapper); | |
393 break; | |
394 case RRType::Configure: | |
395 VampnProto::buildVampResponse_Configure(builder, rr.configurationResponse); | |
396 break; | |
397 case RRType::Process: | |
398 VampnProto::buildVampResponse_Process(builder, rr.processResponse); | |
399 break; | |
400 case RRType::Finish: | |
401 VampnProto::buildVampResponse_Finish(builder, rr.finishResponse); | |
402 break; | |
403 case RRType::NotValid: | |
404 break; | |
405 } | |
406 | |
407 writePackedMessageToFd(1, message); | |
342 } | 408 } |
343 | 409 |
344 RequestOrResponse | 410 RequestOrResponse |
345 readInput(string format, RequestOrResponse::Direction direction) | 411 readInput(string format, RequestOrResponse::Direction direction) |
346 { | 412 { |
368 if (rr.direction == RequestOrResponse::Request) { | 434 if (rr.direction == RequestOrResponse::Request) { |
369 writeRequestJson(rr); | 435 writeRequestJson(rr); |
370 } else { | 436 } else { |
371 writeResponseJson(rr); | 437 writeResponseJson(rr); |
372 } | 438 } |
439 } else if (format == "capnp") { | |
440 if (rr.direction == RequestOrResponse::Request) { | |
441 writeRequestCapnp(rr); | |
442 } else { | |
443 writeResponseCapnp(rr); | |
444 } | |
373 } else { | 445 } else { |
374 throw runtime_error("unknown output format \"" + format + "\""); | 446 throw runtime_error("unknown output format \"" + format + "\""); |
375 } | 447 } |
376 } | 448 } |
377 | 449 |
418 while (true) { | 490 while (true) { |
419 | 491 |
420 try { | 492 try { |
421 | 493 |
422 RequestOrResponse rr = readInput(informat, direction); | 494 RequestOrResponse rr = readInput(informat, direction); |
495 | |
496 // NotValid without an exception indicates EOF: | |
423 if (rr.type == RRType::NotValid) break; | 497 if (rr.type == RRType::NotValid) break; |
498 | |
424 writeOutput(outformat, rr); | 499 writeOutput(outformat, rr); |
425 | 500 |
426 } catch (std::exception &e) { | 501 } catch (std::exception &e) { |
427 cerr << "Error: " << e.what() << endl; | 502 cerr << "Error: " << e.what() << endl; |
428 exit(1); | 503 exit(1); |