using System; using LeafWeb.Core.Entities; using LeafWeb.Core.Remote; namespace LeafWeb.Web.Services { public abstract class PiscalQueueWorker : PiscalQueueBase { public void DoWork(int leafInputId) { LeafInput leafInput = null; try { leafInput = DataService.GetLeafInput(leafInputId); DoWorkInternal(leafInput); } catch (PiscalClientException ex) { PiscalExceptionHandle(ex, leafInput); if (leafInput != null) { DataService.SetLeafInputStatus(leafInput, LeafInputStatusType.Exception, "Error occurred processing LeafInput", ex.Message); } // signal to process next item HangfireStartup.TriggerPiscalProcessQueue(); } catch (Exception ex) { var errorMessage = FormatException(ex, leafInputId); Logger.Error(errorMessage); throw; // this will retry via HangFire } } protected abstract void DoWorkInternal(LeafInput leafInputId); } }