#pragma once #include "Util/AsyncHttpQueue.h" #include "v8datamodel/DataModelJob.h" #include "rbx/threadsafe.h" namespace RBX { class DataModel; class ContentProviderJob : public DataModelJob { public: enum ExecutionMode { JobMode, ImmediateMode }; private: boost::function)> processFunc; boost::function errorFunc; struct ContentProviderTask { std::string id; shared_ptr data; }; bool aborted; rbx::safe_queue tasks; ExecutionMode execMode; TaskScheduler::StepResult processTask(const ContentProviderTask& task); public: ContentProviderJob(shared_ptr dataModel, const char* name, boost::function)> processFunc, boost::function errorFunc); /*override*/ Time::Interval sleepTime(const Stats& stats); /*override*/ Job::Error error(const Stats& stats); /*override*/ TaskScheduler::StepResult stepDataModelJob(const Stats& stats); void abort(); void addTask(const std::string& id, AsyncHttpQueue::RequestResult result, std::istream* filestream, shared_ptr data); void setExecutionMode(ExecutionMode execMode); }; }