MCPcopy Create free account
hub / github.com/ImageEngine/cortex / handleReadOpenParameters

Method handleReadOpenParameters

src/IECoreImage/DisplayDriverServer.cpp:439–527  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

437}
438
439void DisplayDriverServer::Session::handleReadOpenParameters( const boost::system::error_code& error )
440{
441 if (error)
442 {
443 msg( Msg::Error, "DisplayDriverServer::Session::handleReadOpenParameters", error.message().c_str() );
444 m_socket.close();
445 return;
446 }
447
448 StringDataPtr displayDriverType;
449 Box2iDataPtr displayWindow, dataWindow;
450 StringVectorDataPtr channelNames;
451 CompoundDataPtr parameters;
452 bool scanLineOrder = false;
453 bool acceptsRepeatedData = false;
454
455 // handle imageOpen parameters.
456 try
457 {
458 MemoryIndexedIOPtr io = new MemoryIndexedIO( m_buffer, IndexedIO::rootPath, IndexedIO::Exclusive | IndexedIO::Read );
459 displayWindow = boost::static_pointer_cast<Box2iData>( Object::load( io, "displayWindow" ) );
460 dataWindow = boost::static_pointer_cast<Box2iData>( Object::load( io, "dataWindow" ) );
461 channelNames = boost::static_pointer_cast<StringVectorData>( Object::load( io, "channelNames" ) );
462 parameters = boost::static_pointer_cast<CompoundData>( Object::load( io, "parameters" ) );
463
464 const StringData *displayType = parameters->member<StringData>( "remoteDisplayType", true /* throw if missing */ );
465
466 // create a displayDriver using the factory function.
467 if ( !parameters->member<IntData>( "displayDriverServer:mergeId", false ) )
468 {
469 m_displayDriver = DisplayDriver::create( displayType->readable(), displayWindow->readable(), dataWindow->readable(), channelNames->readable(), parameters );
470 }
471 else
472 {
473 m_mergeId = parameters->member<IntData>( "displayDriverServer:mergeId", false /* throw if missing */ )->readable();
474
475 // Check if merge ID in map, if not then create display driver and session count pair with merge ID.
476 auto &m = m_mergeMap[m_mergeId.value()];
477 if ( !m.mergeDriver )
478 {
479 const IntData *sessionClientsData = parameters->member<IntData>( "displayDriverServer:mergeClients", true /* throw if missing */ );
480 m.mergeDriver= DisplayDriver::create(
481 displayType->readable(),
482 displayWindow->readable(),
483 displayWindow->readable(), // For merge we want dataWindow = displayWindow
484 channelNames->readable(),
485 parameters
486 );
487 m.mergeCount = sessionClientsData->readable();
488 }
489 // Merge ID is now in map, so load the display driver.
490 m_displayDriver = m.mergeDriver;
491 }
492 scanLineOrder = m_displayDriver->scanLineOrderOnly();
493 acceptsRepeatedData = m_displayDriver->acceptsRepeatedData();
494 }
495 catch( std::exception &e )
496 {

Callers

nothing calls this directly

Calls 9

createFunction · 0.85
closeMethod · 0.80
readableMethod · 0.80
whatMethod · 0.80
bindFunction · 0.50
valueMethod · 0.45
scanLineOrderOnlyMethod · 0.45
acceptsRepeatedDataMethod · 0.45
bufferMethod · 0.45

Tested by

no test coverage detected