using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Tango.Scripting.Basic { public class ProjectSession { private Action _abortAction; public event EventHandler StateChanged; public ProjectSessionState State { get; set; } public Project Project { get; set; } public ProjectSession(Project project, Action abortAction) { Project = project; _abortAction = abortAction; } public void Abort() { _abortAction(); State = ProjectSessionState.Aborted; RaiseStateChanged(); } internal void Failed(Exception ex) { State = ProjectSessionState.Failed; RaiseStateChanged(null, ex); } internal void Completed(object returnValue) { State = ProjectSessionState.Completed; RaiseStateChanged(returnValue, null); } private void RaiseStateChanged(object returnValue = null, Exception ex = null) { StateChanged?.Invoke(this, new ProjectSessionStateChangedEventArgs() { ReturnValue = returnValue, State = State, Exception = ex }); } } }