comparison Framework/Toolbox/OrthancSlicesLoader.cpp @ 299:3897f9f28cfa am-callable-and-promise

backup work in progress: updated messaging framework with ICallable
author am@osimis.io
date Fri, 14 Sep 2018 16:44:01 +0200
parents 5bd4161bf11b
children b4abaeb783b1
comparison
equal deleted inserted replaced
298:f58bfb7bbcc9 299:3897f9f28cfa
251 251
252 switch (operation->GetMode()) 252 switch (operation->GetMode())
253 { 253 {
254 case Mode_FrameGeometry: 254 case Mode_FrameGeometry:
255 case Mode_SeriesGeometry: 255 case Mode_SeriesGeometry:
256 that_.EmitMessage(IMessage(MessageType_SliceLoader_GeometryError)); 256 that_.EmitMessage(SliceGeometryErrorMessage(that_));
257 that_.state_ = State_Error; 257 that_.state_ = State_Error;
258 break; 258 break;
259 259
260 case Mode_LoadImage: 260 case Mode_LoadImage:
261 { 261 {
269 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); 269 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
270 } 270 }
271 } 271 }
272 }; 272 };
273 273
274 void OrthancSlicesLoader::HandleMessage(IObservable& from, const IMessage& message) 274 // void OrthancSlicesLoader::HandleMessage(IObservable& from, const IMessage& message)
275 { 275 // {
276 // forward messages to its own observers 276 // // forward messages to its own observers
277 IObservable::broker_.EmitMessage(from, IObservable::observers_, message); 277 // IObservable::broker_.EmitMessage(from, IObservable::observers_, message);
278 } 278 // }
279 279
280 280
281 void OrthancSlicesLoader::NotifySliceImageSuccess(const Operation& operation, 281 void OrthancSlicesLoader::NotifySliceImageSuccess(const Operation& operation,
282 std::auto_ptr<Orthanc::ImageAccessor>& image) 282 std::auto_ptr<Orthanc::ImageAccessor>& image)
283 { 283 {
319 state_ = State_GeometryReady; 319 state_ = State_GeometryReady;
320 320
321 if (ok) 321 if (ok)
322 { 322 {
323 LOG(INFO) << "Loaded a series with " << slices_.GetSliceCount() << " slice(s)"; 323 LOG(INFO) << "Loaded a series with " << slices_.GetSliceCount() << " slice(s)";
324 EmitMessage(IMessage(MessageType_SliceLoader_GeometryReady)); 324 EmitMessage(SliceGeometryReadyMessage(*this));
325 } 325 }
326 else 326 else
327 { 327 {
328 LOG(ERROR) << "This series is empty"; 328 LOG(ERROR) << "This series is empty";
329 EmitMessage(IMessage(MessageType_SliceLoader_GeometryError)); 329 EmitMessage(SliceGeometryErrorMessage(*this));
330 } 330 }
331 } 331 }
332 332
333 333
334 void OrthancSlicesLoader::ParseSeriesGeometry(const void* answer, 334 void OrthancSlicesLoader::ParseSeriesGeometry(const void* answer,
336 { 336 {
337 Json::Value series; 337 Json::Value series;
338 if (!MessagingToolbox::ParseJson(series, answer, size) || 338 if (!MessagingToolbox::ParseJson(series, answer, size) ||
339 series.type() != Json::objectValue) 339 series.type() != Json::objectValue)
340 { 340 {
341 EmitMessage(IMessage(MessageType_SliceLoader_GeometryError)); 341 EmitMessage(SliceGeometryErrorMessage(*this));
342 return; 342 return;
343 } 343 }
344 344
345 Json::Value::Members instances = series.getMemberNames(); 345 Json::Value::Members instances = series.getMemberNames();
346 346
383 { 383 {
384 Json::Value tags; 384 Json::Value tags;
385 if (!MessagingToolbox::ParseJson(tags, answer, size) || 385 if (!MessagingToolbox::ParseJson(tags, answer, size) ||
386 tags.type() != Json::objectValue) 386 tags.type() != Json::objectValue)
387 { 387 {
388 EmitMessage(IMessage(MessageType_SliceLoader_GeometryError)); 388 EmitMessage(SliceGeometryErrorMessage(*this));
389 return; 389 return;
390 } 390 }
391 391
392 OrthancPlugins::FullOrthancDataset dataset(tags); 392 OrthancPlugins::FullOrthancDataset dataset(tags);
393 393
410 slices_.AddSlice(slice.release()); 410 slices_.AddSlice(slice.release());
411 } 411 }
412 else 412 else
413 { 413 {
414 LOG(WARNING) << "Skipping invalid multi-frame instance " << instanceId; 414 LOG(WARNING) << "Skipping invalid multi-frame instance " << instanceId;
415 EmitMessage(IMessage(MessageType_SliceLoader_GeometryError)); 415 EmitMessage(SliceGeometryErrorMessage(*this));
416 return; 416 return;
417 } 417 }
418 } 418 }
419 419
420 SortAndFinalizeSlices(); 420 SortAndFinalizeSlices();
428 { 428 {
429 Json::Value tags; 429 Json::Value tags;
430 if (!MessagingToolbox::ParseJson(tags, answer, size) || 430 if (!MessagingToolbox::ParseJson(tags, answer, size) ||
431 tags.type() != Json::objectValue) 431 tags.type() != Json::objectValue)
432 { 432 {
433 EmitMessage(IMessage(MessageType_SliceLoader_GeometryError)); 433 EmitMessage(SliceGeometryErrorMessage(*this));
434 return; 434 return;
435 } 435 }
436 436
437 OrthancPlugins::FullOrthancDataset dataset(tags); 437 OrthancPlugins::FullOrthancDataset dataset(tags);
438 438
444 std::auto_ptr<Slice> slice(new Slice); 444 std::auto_ptr<Slice> slice(new Slice);
445 if (slice->ParseOrthancFrame(dicom, instanceId, frame)) 445 if (slice->ParseOrthancFrame(dicom, instanceId, frame))
446 { 446 {
447 LOG(INFO) << "Loaded instance geometry " << instanceId; 447 LOG(INFO) << "Loaded instance geometry " << instanceId;
448 slices_.AddSlice(slice.release()); 448 slices_.AddSlice(slice.release());
449 EmitMessage(IMessage(MessageType_SliceLoader_GeometryReady)); 449 EmitMessage(SliceGeometryErrorMessage(*this));
450 } 450 }
451 else 451 else
452 { 452 {
453 LOG(WARNING) << "Skipping invalid instance " << instanceId; 453 LOG(WARNING) << "Skipping invalid instance " << instanceId;
454 EmitMessage(IMessage(MessageType_SliceLoader_GeometryError)); 454 EmitMessage(SliceGeometryErrorMessage(*this));
455 } 455 }
456 } 456 }
457 457
458 458
459 void OrthancSlicesLoader::ParseSliceImagePng(const Operation& operation, 459 void OrthancSlicesLoader::ParseSliceImagePng(const Operation& operation,