Files
Saxonite/SaxoniteCoreWebAdmin/Admin/Consoles/SaxProcessConsole_Admin.cs
T
2024-02-27 15:45:47 +00:00

121 lines
3.5 KiB
C#

using MimeKit;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Procs;
using Saxonite.Net.Core.Web.Admin.Procs;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Consoles;
using Saxonite.Net.Standard.Base.Procs;
using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace Saxonite.Net.Core.Web.Admin.Consoles
{
//=======================================================================
public class SaxProcessConsole_Admin : SaxProcessConsole
{
//-------------------------------------------------------------------
// Definitions.
public enum ProcessType
{
OrganisationUpload
}
//-------------------------------------------------------------------
// Process cache - to sustain processes outside of request/response timescales.
internal class ProcessData
{
public ProcessData(SaxProcess_Admin process)
{
this.Process = process;
}
public SaxProcess_Admin Process { get; }
}
// Cache.
private Dictionary<ProcessType, ProcessData> processes { get; } = new Dictionary<ProcessType, ProcessData>();
//-------------------------------------------------------------------
// Data members.
private SaxInternals internals = null;
//-------------------------------------------------------------------
// Construction.
public SaxProcessConsole_Admin(SaxSessionContext sessionContext) : base(sessionContext)
{
}
protected async override void Dispose(bool disposing)
{
if (disposing)
{
// Clear processes.
foreach (ProcessData processData in processes.Values)
{
await processData.Process.StopProcessAsync();
processData.Process.Dispose();
}
}
base.Dispose(disposing);
}
//-------------------------------------------------------------------
// Processes.
//-------------------------------------------------------------------
public SaxProcess_Admin GetProcess(ProcessType processType)
{
return processes.GetValueOrDefault(processType, null)?.Process;
}
public bool IsProcessing(ProcessType processType)
{
SaxProcess_Admin process = GetProcess(processType);
if (process != null)
if (process.Processing) return true;
return false;
}
/// <summary>
/// Remove the process from the cache.
/// </summary>
/// <param name="processType"></param>
/// <returns></returns>
/// <exception cref="InProgressException"></exception>
public bool ClearProcess(ProcessType processType)
{
SaxProcess_Admin process = GetProcess(processType);
if (process != null)
{
if (process.Processing)
throw new SaProcess_Base.InProgressException();
process.Dispose();
}
return processes.Remove(processType);
}
public void SetProcess(ProcessType processType, SaxProcess_Admin process)
{
ClearProcess(processType);
processes.Add(processType, new ProcessData(process));
}
//-------------------------------------------------------------------
// Specific processes.
//-------------------------------------------------------------------
//-------------------------------------------------------------------
// Organisation Upload.
public SaxOrganisationUploader GetSaxOrganisationUploader()
{
return GetProcess(ProcessType.OrganisationUpload) as SaxOrganisationUploader;
}
public void SetProcess(SaxOrganisationUploader process)
{
SetProcess(ProcessType.OrganisationUpload, process);
}
//-------------------------------------------------------------------
}
//=======================================================================
}