in src/Engines/ExecuteRequestHandler.cs [210:252]
public override async Task<ExecutionResult> HandleAsync(Message message, ExecutionResult? previousResult, Action onHandled)
{
this.logger.LogDebug($"Asked to execute code:\n{((ExecuteRequestContent)message.Content).Code}");
if (previousResult != null && previousResult.Value.Status != ExecuteStatus.Ok)
{
this.logger.LogDebug("Aborting due to previous execution result indicating failure: {PreviousResult}", previousResult.Value);
onHandled();
await SendAbortMessage(message);
return ExecutionResult.Aborted;
}
var executionCount = IncrementExecutionCount();
shellServer.NotifyBusyStatus(message, ExecutionState.Busy);
try
{
var result = await ExecutionTaskForMessage(message, executionCount, onHandled);
return result;
}
catch (TaskCanceledException tce)
{
this.logger?.LogDebug(tce, "Task cancelled.");
return new ExecutionResult
{
Output = null,
Status = ExecuteStatus.Abort
};
}
catch (Exception e)
{
this.logger?.LogError(e, "Unable to process ExecuteRequest");
return new ExecutionResult
{
Output = e,
Status = ExecuteStatus.Error
};
}
finally
{
shellServer.NotifyBusyStatus(message, ExecutionState.Idle);
}
}