/// <summary> /// Serialize a task to the database to be run at a later date. /// </summary> /// <param name="task">Any object that implements ITask</param> public static void ScheduleTask(BaseTaskRunner runner, DateTime run_at) { // MJL 2013-11-07 - The idea is to use reflection or an IoC container // (StructureMap, Unity, etc...) to instantiate an object based on its // fully qualified type name. Serialize / Deserialize can then be // used to restore the object's state. // The database table would look something like: // Tasks(id, type_name, state, run_at) // Saving a task would go something like: //string type_name = task.GetType().FullName; //string state = task.Serialize(); //Database.Save(type_name, state, run_at) // Restoring a task would be something like // ITask instance = Activator.CreateInstance(Type.GetType(type_name)); // instance.Deserialize(state); // instance.Run(); Task task = new Task(0) { CreatedAt = DateTime.Now, RunAt = run_at, State = runner.Serialize(), Runner = runner.GetType().FullName }; // make sure this was called. //task.State = Task.Serialize<T>(task); task.Save(); }
public static ReturnObject Run(HttpContext context, long task_id) { if (task_id <= 0) return new ReturnObject {Error = true, Message = "Invalid Task."}; Task item = new Task(task_id); Type runnerType = Type.GetType(item.Runner); if(runnerType == null) return new ReturnObject{Error = true, Message = "Invalid task runner requested."}; BaseTaskRunner.Deserialize(item.State, runnerType).Run(); return new ReturnObject { Error = false, Growl = new ReturnGrowlObject { Type = "default", Vars = new ReturnGrowlVarsObject { text = "The task completed successfully.", title = "Task Run" } } }; }