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

Method ClientDisplayDriver

src/IECoreImage/ClientDisplayDriver.cpp:88–156  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

86const DisplayDriver::DisplayDriverDescription<ClientDisplayDriver> ClientDisplayDriver::g_description;
87
88ClientDisplayDriver::ClientDisplayDriver( const Imath::Box2i &displayWindow, const Imath::Box2i &dataWindow, const std::vector<std::string> &channelNames, IECore::ConstCompoundDataPtr parameters ) :
89 DisplayDriver( displayWindow, dataWindow, channelNames, parameters ),
90 m_data( new PrivateData() )
91{
92 // expects three custom StringData parameters : displayHost, displayPort and displayType
93 const StringData *displayHostData = parameters->member<StringData>( "displayHost", true /* throw if missing */ );
94 const StringData *displayPortData = parameters->member<StringData>( "displayPort", true /* throw if missing */ );
95
96 m_data->m_host = displayHostData->readable();
97 m_data->m_port = displayPortData->readable();
98
99 tcp::resolver resolver(m_data->m_service);
100 tcp::resolver::query query(m_data->m_host, m_data->m_port);
101
102 boost::system::error_code error;
103 tcp::resolver::iterator iterator = resolver.resolve( query, error );
104 if( !error )
105 {
106 error = boost::asio::error::host_not_found;
107 while( error && iterator != tcp::resolver::iterator() )
108 {
109 m_data->m_socket.close();
110 m_data->m_socket.connect( *iterator++, error );
111 }
112 }
113 if( error )
114 {
115 throw Exception( std::string( "Could not connect to remote display driver server : " ) + error.message() );
116 }
117
118 MemoryIndexedIOPtr io;
119 ConstCharVectorDataPtr buf;
120 Box2iDataPtr displayWindowData = new Box2iData( displayWindow );
121 Box2iDataPtr dataWindowData = new Box2iData( dataWindow );
122 StringVectorDataPtr channelNamesData = new StringVectorData( channelNames );
123
124 IECore::CompoundDataPtr tmpParameters = parameters->copy();
125#ifndef _MSC_VER
126 tmpParameters->writable()[ "clientPID" ] = new IntData( getpid() );
127#else
128 tmpParameters->writable()[ "clientPID" ] = new IntData( _getpid() );
129#endif
130
131 // build the data block
132 io = new MemoryIndexedIO( ConstCharVectorDataPtr(), IndexedIO::rootPath, IndexedIO::Exclusive | IndexedIO::Write );
133 displayWindowData->Object::save( io, "displayWindow" );
134 dataWindowData->Object::save( io, "dataWindow" );
135 channelNamesData->Object::save( io, "channelNames" );
136 tmpParameters->Object::save( io, "parameters" );
137 buf = io->buffer();
138
139 size_t dataSize = buf->readable().size();
140
141 sendHeader( DisplayDriverServerHeader::imageOpen, dataSize );
142
143 boost::asio::write( m_data->m_socket, boost::asio::buffer( &(buf->readable()[0]), dataSize ) );
144
145 if ( receiveHeader( DisplayDriverServerHeader::imageOpen ) != sizeof(m_data->m_scanLineOrderOnly) )

Callers 5

testMergeMapMethod · 0.80
testTransferMethod · 0.80

Calls 7

writeFunction · 0.85
readableMethod · 0.80
closeMethod · 0.80
copyMethod · 0.45
writableMethod · 0.45
bufferMethod · 0.45
sizeMethod · 0.45

Tested by 5

testMergeMapMethod · 0.64
testTransferMethod · 0.64