void MasterFromWallChannel::processMessages() { while( _processMessages ) { const ProbeResult result = _mpiChannel->probe(); if( !result.isValid( )) { put_flog( LOG_ERROR, "Invalid probe result size: %d", result.size ); continue; } _buffer.setSize( result.size ); _mpiChannel->receive( _buffer.data(), result.size, result.src, result.message ); switch( result.message ) { case MPI_MESSAGE_TYPE_REQUEST_FRAME: { QString uri; _buffer.deserialize( uri ); emit receivedRequestFrame( uri ); break; } case MPI_MESSAGE_TYPE_QUIT: _processMessages = false; break; default: put_flog( LOG_WARN, "Invalid message type: %d", result.message ); break; } } }
void ProcessForker::run() { ReceiveBuffer buffer; while (_processMessages) { const ProbeResult result = _mpiChannel->probe(); if (!result.isValid()) { print_log(LOG_ERROR, LOG_MPI, "Invalid probe result size: %d", result.size); continue; } buffer.setSize(result.size); _mpiChannel->receive(buffer.data(), result.size, result.src, int(result.message)); switch (result.message) { case MPIMessageType::START_PROCESS: { const auto string = serialization::get<QString>(buffer); const auto args = string.split('#'); if (args.length() != 3) { print_log(LOG_WARN, LOG_MPI, "Invalid command: '%d'", string.toLocal8Bit().constData()); break; } _launch(args[0], args[1], args[2].split(';')); break; } case MPIMessageType::QUIT: _processMessages = false; break; default: print_log(LOG_WARN, LOG_MPI, "Invalid message type: '%d'", result.message); break; } } }