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); }
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()); } }