| 348 | } |
| 349 | |
| 350 | void DisplayDriverServer::Session::handleReadHeader( const boost::system::error_code& error ) |
| 351 | { |
| 352 | if (error) |
| 353 | { |
| 354 | msg( Msg::Error, "DisplayDriverServer::Session::handleReadHeader", error.message().c_str() ); |
| 355 | m_socket.close(); |
| 356 | return; |
| 357 | } |
| 358 | |
| 359 | if ( !m_header.valid() ) |
| 360 | { |
| 361 | msg( Msg::Error, "DisplayDriverServer::Session::handleReadHeader", "Invalid header!" ); |
| 362 | m_socket.close(); |
| 363 | return; |
| 364 | } |
| 365 | |
| 366 | // get number of bytes ahead (unsigned int value) |
| 367 | size_t bytesAhead = m_header.getDataSize(); |
| 368 | |
| 369 | CharVectorData::ValueType &data = m_buffer->writable(); |
| 370 | data.resize( bytesAhead ); |
| 371 | |
| 372 | // service |
| 373 | switch( m_header.messageType() ) |
| 374 | { |
| 375 | case DisplayDriverServerHeader::imageOpen: |
| 376 | boost::asio::async_read( m_socket, |
| 377 | boost::asio::buffer( &data[0], bytesAhead ), |
| 378 | boost::bind( &DisplayDriverServer::Session::handleReadOpenParameters, SessionPtr(this), boost::asio::placeholders::error) |
| 379 | ); |
| 380 | break; |
| 381 | |
| 382 | case DisplayDriverServerHeader::imageData: |
| 383 | boost::asio::async_read( m_socket, |
| 384 | boost::asio::buffer( &data[0], bytesAhead ), |
| 385 | boost::bind(&DisplayDriverServer::Session::handleReadDataParameters, SessionPtr(this), |
| 386 | boost::asio::placeholders::error)); |
| 387 | break; |
| 388 | |
| 389 | case DisplayDriverServerHeader::imageClose: |
| 390 | if ( m_displayDriver ) |
| 391 | { |
| 392 | try |
| 393 | { |
| 394 | if ( !m_mergeId.has_value() ) |
| 395 | { |
| 396 | m_displayDriver->imageClose(); |
| 397 | } |
| 398 | else |
| 399 | { |
| 400 | auto &m = m_mergeMap.at(m_mergeId.value()); // Error out if not found |
| 401 | if ( --m.mergeCount <= 0 ) |
| 402 | { |
| 403 | m_mergeMap.erase(m_mergeId.value()); |
| 404 | m_displayDriver->imageClose(); |
| 405 | } |
| 406 | } |
| 407 | } |
nothing calls this directly
no test coverage detected