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