using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Tango.Scripting { public class ScriptSession { private Action _abortAction; public event EventHandler StateChanged; public Script Script { get; private set; } public String EffectiveCode { get; set; } public ScriptSessionState State { get; set; } public ScriptSession(Script script, String effectiveCode, Action abortAction) { _abortAction = abortAction; Script = script; EffectiveCode = effectiveCode; } public void Abort() { _abortAction(); State = ScriptSessionState.Aborted; RaiseStateChanged(); } internal void Failed(Exception ex) { State = ScriptSessionState.Failed; RaiseStateChanged(null, ex); } internal void Completed(object returnValue) { State = ScriptSessionState.Completed; RaiseStateChanged(returnValue, null); } private void RaiseStateChanged(object returnValue = null, Exception ex = null) { StateChanged?.Invoke(this, new ScriptSessionStateChangedEventArgs() { ReturnValue = returnValue, State = State, Exception = ex }); } } }