Skip to content

Commit

Permalink
Added Support to API for Awaiting Execution Result
Browse files Browse the repository at this point in the history
  • Loading branch information
saucepleez committed Dec 2, 2019
1 parent 1539aee commit 59e393b
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 12 deletions.
30 changes: 28 additions & 2 deletions taskt/Core/Automation/Engine/AutomationEngineInstance.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ public class AutomationEngineInstance
public event EventHandler<ScriptFinishedEventArgs> ScriptFinishedEvent;
public event EventHandler<LineNumberChangedEventArgs> LineNumberChangedEvent;

public string TasktResult { get; set; } = "";

public Serilog.Core.Logger engineLogger;
public AutomationEngineInstance()
{
Expand All @@ -56,6 +58,7 @@ public AutomationEngineInstance()
serverSettings = settings.ServerSettings;

VariableList = new List<Script.ScriptVariable>();

AppInstances = new Dictionary<string, object>();
ServiceResponses = new List<IRestResponse>();
DataTables = new List<DataTable>();
Expand Down Expand Up @@ -449,7 +452,18 @@ public virtual void ScriptFinished(ScriptFinishedEventArgs.ScriptFinishedResult
{
engineLogger.Information("Result Code: " + result.ToString());


//add result variable if missing
var resultVar = VariableList.Where(f => f.VariableName == "taskt.Result").FirstOrDefault();

//handle if variable is missing
if (resultVar == null)
{
resultVar = new Script.ScriptVariable() { VariableName = "taskt.Result", VariableValue = "" };
}

//check value
var resultValue = resultVar.VariableValue.ToString();


if (error == null)
{
Expand All @@ -459,6 +473,16 @@ public virtual void ScriptFinished(ScriptFinishedEventArgs.ScriptFinishedResult
{
HttpServerClient.UpdateTask(taskModel.TaskID, "Completed", "Script Completed Successfully");
}

if (string.IsNullOrEmpty(resultValue))
{
TasktResult = "Successfully Completed Script";
}
else
{
TasktResult = resultValue;
}

}

else
Expand All @@ -469,7 +493,9 @@ public virtual void ScriptFinished(ScriptFinishedEventArgs.ScriptFinishedResult
{
HttpServerClient.UpdateTask(taskModel.TaskID, "Error", error);
}


TasktResult = error;

}

engineLogger.Dispose();
Expand Down
42 changes: 38 additions & 4 deletions taskt/Core/Server/LocalTCPListener.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,15 @@ namespace taskt.Core.Server
/// </summary>
public static class LocalTCPListener
{
private static Automation.Engine.AutomationEngineInstance automationInstance;
public static Automation.Engine.AutomationEngineInstance automationInstance;
private static Serilog.Core.Logger automationLogger;
public static TcpListener automationListener;
private static LocalListenerSettings listenerSettings;
public static UI.Forms.frmScriptBuilder associatedBuilder;
public static int Port;
public static bool IsListening { get; set; }

public static string TasktResult { get; set; }
public static event EventHandler ListeningStarted;
public static event EventHandler ListeningStopped;
static LocalTCPListener()
Expand Down Expand Up @@ -198,7 +199,7 @@ public static void StartAutomationListener(int port)
private static void ProcessRequest(string data, string[] messageContent, NetworkStream stream)
{

if (data.StartsWith("POST /ExecuteScript"))
if ((data.StartsWith("POST /ExecuteScript")) || (data.StartsWith("POST /AwaitScript")))
{
automationLogger.Information($"Client Requests Script Execution");

Expand Down Expand Up @@ -272,18 +273,44 @@ private static void ProcessRequest(string data, string[] messageContent, Network
//log execution
automationLogger.Information($"Executing Script: {dataParameter}");


//invoke builder and pass it script data to execute
associatedBuilder.Invoke(new MethodInvoker(delegate ()
{
UI.Forms.frmScriptEngine newEngine = new UI.Forms.frmScriptEngine();
newEngine.xmlData = dataParameter;
newEngine.callBackForm = null;
//instance = newEngine.engineInstance;
newEngine.Show();
}));

byte[] msg = System.Text.Encoding.ASCII.GetBytes("200 OK");


SendResponse(ResponseCode.OK, "Script Launched Successfully", stream);
if (data.StartsWith("POST /AwaitScript"))
{
//reset result value
TasktResult = "";

//add reference to script finished event
automationInstance.ScriptFinishedEvent += AutomationInstance_ScriptFinishedEvent;

//wait for script to finish before returning
do
{
Thread.Sleep(1000);
} while (TasktResult == string.Empty);

//send response back to client
SendResponse(ResponseCode.OK, automationInstance.TasktResult, stream);

}
else
{
//return success immediately
SendResponse(ResponseCode.OK, "Script Launched Successfully", stream);
}



}
else if (data.StartsWith("POST /EngineStatus"))
Expand All @@ -303,6 +330,13 @@ private static void ProcessRequest(string data, string[] messageContent, Network
SendResponse(ResponseCode.InternalServerError, "Invalid Client Request", stream);
}
}

private static void AutomationInstance_ScriptFinishedEvent(object sender, Automation.Engine.ScriptFinishedEventArgs e)
{
//set result once script completes
TasktResult = automationInstance.TasktResult;
}

public static void SendResponse(ResponseCode ResponseCode, string content, Stream networkStream)
{
System.IO.StreamWriter writer = new System.IO.StreamWriter(networkStream);
Expand Down
12 changes: 6 additions & 6 deletions taskt/UI/Forms/frmScriptEngine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,11 @@ public partial class frmScriptEngine : ThemedForm
public bool serverExecution { get; set; }
public frmScriptBuilder callBackForm { get; set; }
private bool advancedDebug { get; set; }
private Core.Automation.Engine.AutomationEngineInstance engineInstance { get; set; }
public AutomationEngineInstance engineInstance { get; set; }
private List<Core.Script.ScriptVariable> Variables { get; set; }
public bool CloseWhenDone = false;
#endregion

public string Result { get; set; }
//events and methods
#region Form Events/Methods
public frmScriptEngine(string pathToFile, frmScriptBuilder builderForm, List<Core.Script.ScriptVariable> variables = null, bool blnCloseWhenDone = false)
Expand Down Expand Up @@ -162,6 +162,8 @@ private void frmProcessingStatus_Load(object sender, EventArgs e)
engineInstance.taskModel = remoteTask;
engineInstance.tasktEngineUI = this;
engineInstance.serverExecution = this.serverExecution;
Core.Server.LocalTCPListener.automationInstance = engineInstance;

if (xmlData == null)
{
engineInstance.ExecuteScriptAsync(this, filePath, Variables);
Expand Down Expand Up @@ -215,15 +217,11 @@ private void Engine_ScriptFinishedEvent(object sender, ScriptFinishedEventArgs e
case ScriptFinishedEventArgs.ScriptFinishedResult.Successful:
AddStatus("Script Completed Successfully");
UpdateUI("debug info (success)");

break;
case ScriptFinishedEventArgs.ScriptFinishedResult.Error:
AddStatus("Error: " + e.Error);
AddStatus("Script Completed With Errors!");
UpdateUI("debug info (error)");



break;
case ScriptFinishedEventArgs.ScriptFinishedResult.Cancelled:
AddStatus("Script Cancelled By User");
Expand All @@ -234,6 +232,8 @@ private void Engine_ScriptFinishedEvent(object sender, ScriptFinishedEventArgs e
}


Result = engineInstance.TasktResult;


AddStatus("Total Execution Time: " + e.ExecutionTime.ToString());

Expand Down

0 comments on commit 59e393b

Please sign in to comment.