コード例 #1
0
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;
        }
    }
}
コード例 #2
0
ファイル: ProcessForker.cpp プロジェクト: ppodhajski/Tide
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;
        }
    }
}