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