using Sarand.Net.Standard.Base.Procs; using Sarand.Net.Standard.Base.Utils; using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.Consoles; using Saxonite.Web.Api.Procs; namespace Saxonite.Web.Api.Consoles { //======================================================================= public class SaxProcessConsole_Api : SaxProcessConsole { //------------------------------------------------------------------- // Definitions. public enum ProcessType { } //------------------------------------------------------------------- // Process cache - to sustain processes outside of request/response timescales. internal class ProcessData { public ProcessData(SaxProcess_Api process) { this.Process = process; } public SaxProcess_Api Process { get; } } // Cache. private Dictionary processes { get; } = new Dictionary(); //------------------------------------------------------------------- // Data members. private SaxInternals? internals = null; //------------------------------------------------------------------- // Construction. public SaxProcessConsole_Api(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(); } processes.Clear(); // Internals. if (internals != null) { internals.Dispose(); internals = null; } } base.Dispose(disposing); } //------------------------------------------------------------------- // Priority. //------------------------------------------------------------------- // Processes. //------------------------------------------------------------------- public SaxProcess_Api? GetProcess(ProcessType processType) { return DictionaryUtil.GetValue(processes,processType, null)?.Process; } public bool IsProcessing(ProcessType processType) { SaxProcess_Api? 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_Api? 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_Api process) { ClearProcess(processType); processes.Add(processType, new ProcessData(process)); } //------------------------------------------------------------------- // Specific processes. //------------------------------------------------------------------- //------------------------------------------------------------------- } //======================================================================= }