Mercurial > hg > orthanc-stone
comparison Samples/Sdl/Loader.cpp @ 640:e706188d6078
reorganization
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 10 May 2019 10:57:21 +0200 |
parents | d1f4521b9bbb |
children | 392783c90607 |
comparison
equal
deleted
inserted
replaced
639:d1f4521b9bbb | 640:e706188d6078 |
---|---|
396 | 396 |
397 unsigned int GetTimeout() const | 397 unsigned int GetTimeout() const |
398 { | 398 { |
399 return timeout_; | 399 return timeout_; |
400 } | 400 } |
401 | |
402 void ProcessHttpAnswer(IMessageEmitter& emitter, | |
403 const OrthancStone::IObserver& receiver, | |
404 const std::string& answer, | |
405 const HttpHeaders& answerHeaders) const | |
406 { | |
407 Orthanc::MimeType contentType = Orthanc::MimeType_Binary; | |
408 | |
409 for (HttpHeaders::const_iterator it = answerHeaders.begin(); | |
410 it != answerHeaders.end(); ++it) | |
411 { | |
412 std::string s; | |
413 Orthanc::Toolbox::ToLowerCase(s, it->first); | |
414 | |
415 if (s == "content-type") | |
416 { | |
417 contentType = Orthanc::StringToMimeType(it->second); | |
418 break; | |
419 } | |
420 } | |
421 | |
422 std::auto_ptr<Orthanc::ImageAccessor> image; | |
423 | |
424 switch (contentType) | |
425 { | |
426 case Orthanc::MimeType_Png: | |
427 { | |
428 image.reset(new Orthanc::PngReader); | |
429 dynamic_cast<Orthanc::PngReader&>(*image).ReadFromMemory(answer); | |
430 break; | |
431 } | |
432 | |
433 case Orthanc::MimeType_Pam: | |
434 { | |
435 image.reset(new Orthanc::PamReader); | |
436 dynamic_cast<Orthanc::PamReader&>(*image).ReadFromMemory(answer); | |
437 break; | |
438 } | |
439 | |
440 case Orthanc::MimeType_Jpeg: | |
441 { | |
442 image.reset(new Orthanc::JpegReader); | |
443 dynamic_cast<Orthanc::JpegReader&>(*image).ReadFromMemory(answer); | |
444 break; | |
445 } | |
446 | |
447 default: | |
448 throw Orthanc::OrthancException(Orthanc::ErrorCode_NetworkProtocol, | |
449 "Unsupported HTTP Content-Type for an image: " + | |
450 std::string(Orthanc::EnumerationToString(contentType))); | |
451 } | |
452 | |
453 DecodeOrthancImageCommand::SuccessMessage message(*this, image.release(), contentType); | |
454 emitter.EmitMessage(receiver, message); | |
455 } | |
401 }; | 456 }; |
402 | 457 |
403 | 458 |
404 | 459 |
405 class DecodeOrthancWebViewerJpegCommand : public OracleCommandWithPayload | 460 class DecodeOrthancWebViewerJpegCommand : public OracleCommandWithPayload |
513 | 568 |
514 std::string GetUri() const | 569 std::string GetUri() const |
515 { | 570 { |
516 return ("/web-viewer/instances/jpeg" + boost::lexical_cast<std::string>(quality_) + | 571 return ("/web-viewer/instances/jpeg" + boost::lexical_cast<std::string>(quality_) + |
517 "-" + instanceId_ + "_" + boost::lexical_cast<std::string>(frame_)); | 572 "-" + instanceId_ + "_" + boost::lexical_cast<std::string>(frame_)); |
573 } | |
574 | |
575 void ProcessHttpAnswer(IMessageEmitter& emitter, | |
576 const OrthancStone::IObserver& receiver, | |
577 const std::string& answer) const | |
578 { | |
579 Json::Value value; | |
580 Json::Reader reader; | |
581 if (!reader.parse(answer, value)) | |
582 { | |
583 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); | |
584 } | |
585 | |
586 //DecodeOrthancWebViewerJpegCommand::SuccessMessage message(command, image.release(), contentType); | |
587 //emitter.EmitMessage(receiver, message); | |
518 } | 588 } |
519 }; | 589 }; |
520 | 590 |
521 | 591 |
522 | 592 |
659 HttpHeaders answerHeaders; | 729 HttpHeaders answerHeaders; |
660 client.ApplyAndThrowException(answer, answerHeaders); | 730 client.ApplyAndThrowException(answer, answerHeaders); |
661 | 731 |
662 DecodeAnswer(answer, answerHeaders); | 732 DecodeAnswer(answer, answerHeaders); |
663 | 733 |
664 Orthanc::MimeType contentType = Orthanc::MimeType_Binary; | 734 command.ProcessHttpAnswer(emitter_, receiver, answer, answerHeaders); |
665 | |
666 for (HttpHeaders::const_iterator it = answerHeaders.begin(); | |
667 it != answerHeaders.end(); ++it) | |
668 { | |
669 std::string s; | |
670 Orthanc::Toolbox::ToLowerCase(s, it->first); | |
671 | |
672 if (s == "content-type") | |
673 { | |
674 contentType = Orthanc::StringToMimeType(it->second); | |
675 break; | |
676 } | |
677 } | |
678 | |
679 std::auto_ptr<Orthanc::ImageAccessor> image; | |
680 | |
681 switch (contentType) | |
682 { | |
683 case Orthanc::MimeType_Png: | |
684 { | |
685 image.reset(new Orthanc::PngReader); | |
686 dynamic_cast<Orthanc::PngReader&>(*image).ReadFromMemory(answer); | |
687 break; | |
688 } | |
689 | |
690 case Orthanc::MimeType_Pam: | |
691 { | |
692 image.reset(new Orthanc::PamReader); | |
693 dynamic_cast<Orthanc::PamReader&>(*image).ReadFromMemory(answer); | |
694 break; | |
695 } | |
696 | |
697 case Orthanc::MimeType_Jpeg: | |
698 { | |
699 image.reset(new Orthanc::JpegReader); | |
700 dynamic_cast<Orthanc::JpegReader&>(*image).ReadFromMemory(answer); | |
701 break; | |
702 } | |
703 | |
704 default: | |
705 throw Orthanc::OrthancException(Orthanc::ErrorCode_NetworkProtocol, | |
706 "Unsupported HTTP Content-Type for an image: " + | |
707 std::string(Orthanc::EnumerationToString(contentType))); | |
708 } | |
709 | |
710 DecodeOrthancImageCommand::SuccessMessage message(command, image.release(), contentType); | |
711 emitter_.EmitMessage(receiver, message); | |
712 } | 735 } |
713 | 736 |
714 | 737 |
715 void Execute(const OrthancStone::IObserver& receiver, | 738 void Execute(const OrthancStone::IObserver& receiver, |
716 const DecodeOrthancWebViewerJpegCommand& command) | 739 const DecodeOrthancWebViewerJpegCommand& command) |
724 HttpHeaders answerHeaders; | 747 HttpHeaders answerHeaders; |
725 client.ApplyAndThrowException(answer, answerHeaders); | 748 client.ApplyAndThrowException(answer, answerHeaders); |
726 | 749 |
727 DecodeAnswer(answer, answerHeaders); | 750 DecodeAnswer(answer, answerHeaders); |
728 | 751 |
729 Json::Value value; | 752 command.ProcessHttpAnswer(emitter_, receiver, answer); |
730 Json::Reader reader; | |
731 if (reader.parse(answer, value)) | |
732 { | |
733 std::cout << value.toStyledString() << std::endl; | |
734 } | |
735 | |
736 //DecodeOrthancWebViewerJpegCommand::SuccessMessage message(command, image.release(), contentType); | |
737 //emitter_.EmitMessage(receiver, message); | |
738 } | 753 } |
739 | 754 |
740 | 755 |
741 | 756 |
742 void Step() | 757 void Step() |