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);