예제 #1
0
void SenderImpl::process()
{
    OperationDescriptor_ptr op = m_config->operation();

    Holder srcHolder = op->get_holder(m_request);

    // preFunc
    m_evaluator.pre(m_request);
    if (m_evaluator.hasError()) throw m_evaluator.error();

    // processors
    typedef QList< RequestProcessor_ptr > processors_t;
    const processors_t& processors = m_config->processors();

    for (processors_t::const_iterator it = processors.begin();
            it != processors.end(); ++it)
    {
        applyProcessor(m_request, *it, srcHolder);
    }

    // postFunc
    m_evaluator.post(m_request);
    if (m_evaluator.hasError()) throw m_evaluator.error();

    // Clone request
    // We can't emit a request we're going to modify
    Request_ptr request = op->create_request();
    Holder dstHolder = op->get_holder(request);

    op->copy(srcHolder, dstHolder);

    // emit request
    emit sendRequest(request);
    m_config->notifyRequestSent(request);
}
예제 #2
0
void SenderImpl::start(Sender_weak weak)
{
    Sender_ptr ptr (weak.lock());

    if (!ptr)
        return;

    m_evaluator.evaluate(m_config->code());

    bool hasErr = m_evaluator.hasError();

    if (!hasErr)
    {
        OperationDescriptor_ptr op = m_config->operation();

        // Clone the original request
        // We can't modify an emited request
        Holder srcHolder = op->get_holder(m_config->request());

        m_request = op->create_request();
        Holder dstHolder = op->get_holder(m_request);

        op->copy(srcHolder, dstHolder);

        // m_request is the working request
        m_evaluator.init(m_request);

        hasErr = m_evaluator.hasError();
    }

    if (!hasErr)
    {
        m_timer.expires_from_now(
                boost::posix_time::milliseconds(
                    m_config->initDelay()));

        m_timer.async_wait(
                boost::bind(&SenderImpl::handleTimeout,
                    this, weak, _1));
    }
    else
    {
        m_config->notifyFinished();

        emit finished(m_config);

        emit error(m_evaluator.error());
    }
}