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 processes { get; } = new Dictionary(); //------------------------------------------------------------------- // 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; } /// /// Remove the process from the cache. /// /// /// /// 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); } //------------------------------------------------------------------- } //======================================================================= }