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