void Controller::startCommand(const shared_ptr<ControlCommand>& command, const ControlParameters& parameters, const CommandSucceedCallback& onSuccess1, const CommandFailCallback& onFailure1, const CommandOptions& options) { const CommandSucceedCallback& onSuccess = onSuccess1 ? onSuccess1 : [] (const ControlParameters&) {}; const CommandFailCallback& onFailure = onFailure1 ? onFailure1 : [] (const ControlResponse&) {}; Name requestName = command->getRequestName(options.getPrefix(), parameters); Interest interest(requestName); interest.setInterestLifetime(options.getTimeout()); m_keyChain.sign(interest, options.getSigningInfo()); m_face.expressInterest(interest, [=] (const Interest&, const Data& data) { this->processCommandResponse(data, command, onSuccess, onFailure); }, [=] (const Interest&, const lp::Nack&) { onFailure(ControlResponse(Controller::ERROR_NACK, "network Nack received")); }, [=] (const Interest&) { onFailure(ControlResponse(Controller::ERROR_TIMEOUT, "request timed out")); }); }
void Controller::fetchDataset(const Name& prefix, const std::function<void(const ConstBufferPtr&)>& processResponse, const DatasetFailCallback& onFailure, const CommandOptions& options) { Interest baseInterest(prefix); baseInterest.setInterestLifetime(options.getTimeout()); SegmentFetcher::fetch(m_face, baseInterest, m_validator, processResponse, bind(&Controller::processDatasetFetchError, this, onFailure, _1, _2)); }
void Controller::fetchDataset(const Name& prefix, const std::function<void(ConstBufferPtr)>& processResponse, const DatasetFailCallback& onFailure, const CommandOptions& options) { SegmentFetcher::Options fetcherOptions; fetcherOptions.maxTimeout = options.getTimeout(); auto fetcher = SegmentFetcher::start(m_face, Interest(prefix), m_validator, fetcherOptions); if (processResponse) { fetcher->onComplete.connect(processResponse); } if (onFailure) { fetcher->onError.connect([=] (uint32_t code, const std::string& msg) { processDatasetFetchError(onFailure, code, msg); }); } auto it = m_fetchers.insert(fetcher).first; fetcher->onComplete.connect([this, it] (ConstBufferPtr) { m_fetchers.erase(it); }); fetcher->onError.connect([this, it] (uint32_t, const std::string&) { m_fetchers.erase(it); }); }
void Controller::startCommand(const shared_ptr<ControlCommand>& command, const ControlParameters& parameters, const CommandSucceedCallback& onSuccess, const CommandFailCallback& onFailure, const CommandOptions& options) { Name requestName = command->getRequestName(options.getPrefix(), parameters); Interest interest = m_signer.makeCommandInterest(requestName, options.getSigningInfo()); interest.setInterestLifetime(options.getTimeout()); m_face.expressInterest(interest, [=] (const Interest&, const Data& data) { processCommandResponse(data, command, onSuccess, onFailure); }, [=] (const Interest&, const lp::Nack&) { if (onFailure) onFailure(ControlResponse(Controller::ERROR_NACK, "network Nack received")); }, [=] (const Interest&) { if (onFailure) onFailure(ControlResponse(Controller::ERROR_TIMEOUT, "request timed out")); }); }