comparison utilities/vampipe-convert.cpp @ 52:e90fd30990eb

Error handling, and pass plugin handles through
author Chris Cannam <c.cannam@qmul.ac.uk>
date Fri, 16 Sep 2016 16:20:05 +0100
parents f4244a2d55ac
children 9bebe2780cc0
comparison
equal deleted inserted replaced
51:f4244a2d55ac 52:e90fd30990eb
170 Json j = convertResponseJson(input); 170 Json j = convertResponseJson(input);
171 171
172 rr.type = VampJson::getRequestResponseType(j); 172 rr.type = VampJson::getRequestResponseType(j);
173 VampJson::BufferSerialisation serialisation = VampJson::BufferSerialisation::Text; 173 VampJson::BufferSerialisation serialisation = VampJson::BufferSerialisation::Text;
174 174
175 rr.success = j["success"].bool_value();
176 rr.errorText = j["errorText"].string_value();
177
175 switch (rr.type) { 178 switch (rr.type) {
176 179
177 case RRType::List: 180 case RRType::List:
178 rr.listResponse = VampJson::toVampResponse_List(j); 181 rr.listResponse = VampJson::toVampResponse_List(j);
179 break; 182 break;
199 void 202 void
200 writeResponseJson(RequestOrResponse &rr, bool useBase64) 203 writeResponseJson(RequestOrResponse &rr, bool useBase64)
201 { 204 {
202 Json j; 205 Json j;
203 206
204 switch (rr.type) { 207 if (!rr.success) {
205 208
206 case RRType::List: 209 j = VampJson::fromError(rr.errorText, rr.type);
207 j = VampJson::fromVampResponse_List("", rr.listResponse); 210
208 break; 211 } else {
209 case RRType::Load: 212
210 j = VampJson::fromVampResponse_Load(rr.loadResponse, mapper); 213 switch (rr.type) {
211 break; 214
212 case RRType::Configure: 215 case RRType::List:
213 j = VampJson::fromVampResponse_Configure(rr.configurationResponse); 216 j = VampJson::fromVampResponse_List("", rr.listResponse);
214 break; 217 break;
215 case RRType::Process: 218 case RRType::Load:
216 j = VampJson::fromVampResponse_Process 219 j = VampJson::fromVampResponse_Load(rr.loadResponse, mapper);
217 (rr.processResponse, 220 break;
218 mapper, 221 case RRType::Configure:
219 useBase64 ? 222 j = VampJson::fromVampResponse_Configure(rr.configurationResponse);
220 VampJson::BufferSerialisation::Base64 : 223 break;
221 VampJson::BufferSerialisation::Text); 224 case RRType::Process:
222 break; 225 j = VampJson::fromVampResponse_Process
223 case RRType::Finish: 226 (rr.processResponse,
224 j = VampJson::fromVampResponse_Finish 227 mapper,
225 (rr.finishResponse, 228 useBase64 ?
226 mapper, 229 VampJson::BufferSerialisation::Base64 :
227 useBase64 ? 230 VampJson::BufferSerialisation::Text);
228 VampJson::BufferSerialisation::Base64 : 231 break;
229 VampJson::BufferSerialisation::Text); 232 case RRType::Finish:
230 break; 233 j = VampJson::fromVampResponse_Finish
231 case RRType::NotValid: 234 (rr.finishResponse,
232 break; 235 mapper,
233 } 236 useBase64 ?
234 237 VampJson::BufferSerialisation::Base64 :
238 VampJson::BufferSerialisation::Text);
239 break;
240 case RRType::NotValid:
241 break;
242 }
243 }
244
235 cout << j.dump() << endl; 245 cout << j.dump() << endl;
236 } 246 }
237 247
238 RequestOrResponse 248 RequestOrResponse
239 readRequestCapnp(kj::BufferedInputStreamWrapper &buffered) 249 readRequestCapnp(kj::BufferedInputStreamWrapper &buffered)
310 320
311 ::capnp::InputStreamMessageReader message(buffered); 321 ::capnp::InputStreamMessageReader message(buffered);
312 VampResponse::Reader reader = message.getRoot<VampResponse>(); 322 VampResponse::Reader reader = message.getRoot<VampResponse>();
313 323
314 rr.type = VampnProto::getRequestResponseType(reader); 324 rr.type = VampnProto::getRequestResponseType(reader);
325 rr.success = reader.getSuccess();
326 rr.errorText = reader.getErrorText();
315 327
316 switch (rr.type) { 328 switch (rr.type) {
317 329
318 case RRType::List: 330 case RRType::List:
319 VampnProto::readVampResponse_List(rr.listResponse, reader); 331 VampnProto::readVampResponse_List(rr.listResponse, reader);
342 writeResponseCapnp(RequestOrResponse &rr) 354 writeResponseCapnp(RequestOrResponse &rr)
343 { 355 {
344 ::capnp::MallocMessageBuilder message; 356 ::capnp::MallocMessageBuilder message;
345 VampResponse::Builder builder = message.initRoot<VampResponse>(); 357 VampResponse::Builder builder = message.initRoot<VampResponse>();
346 358
347 switch (rr.type) { 359 if (!rr.success) {
348 360
349 case RRType::List: 361 VampnProto::buildVampResponse_Error(builder, rr.errorText, rr.type);
350 VampnProto::buildVampResponse_List(builder, "", rr.listResponse); 362
351 break; 363 } else {
352 case RRType::Load: 364
353 VampnProto::buildVampResponse_Load(builder, rr.loadResponse, mapper); 365 switch (rr.type) {
354 break; 366
355 case RRType::Configure: 367 case RRType::List:
356 VampnProto::buildVampResponse_Configure(builder, rr.configurationResponse); 368 VampnProto::buildVampResponse_List(builder, "", rr.listResponse);
357 break; 369 break;
358 case RRType::Process: 370 case RRType::Load:
359 VampnProto::buildVampResponse_Process(builder, rr.processResponse, mapper); 371 VampnProto::buildVampResponse_Load(builder, rr.loadResponse, mapper);
360 break; 372 break;
361 case RRType::Finish: 373 case RRType::Configure:
362 VampnProto::buildVampResponse_Finish(builder, rr.finishResponse, mapper); 374 VampnProto::buildVampResponse_Configure(builder, rr.configurationResponse);
363 break; 375 break;
364 case RRType::NotValid: 376 case RRType::Process:
365 break; 377 VampnProto::buildVampResponse_Process(builder, rr.processResponse, mapper);
366 } 378 break;
367 379 case RRType::Finish:
380 VampnProto::buildVampResponse_Finish(builder, rr.finishResponse, mapper);
381 break;
382 case RRType::NotValid:
383 break;
384 }
385 }
386
368 writeMessageToFd(1, message); 387 writeMessageToFd(1, message);
369 } 388 }
370 389
371 RequestOrResponse 390 RequestOrResponse
372 readInputJson(RequestOrResponse::Direction direction) 391 readInputJson(RequestOrResponse::Direction direction)
483 if (rr.type == RRType::NotValid) break; 502 if (rr.type == RRType::NotValid) break;
484 503
485 writeOutput(outformat, rr); 504 writeOutput(outformat, rr);
486 505
487 } catch (std::exception &e) { 506 } catch (std::exception &e) {
507
488 cerr << "Error: " << e.what() << endl; 508 cerr << "Error: " << e.what() << endl;
489 exit(1); 509 exit(1);
490 } 510 }
491 } 511 }
492 512