QlbrcProcessorWorker.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using Quadarax.Foundation.Core.Thread;
  2. using Quadarax.Application.QLiberace.Base.Services;
  3. using Quadarax.Application.QLiberace.Processor.Settings;
  4. using Quadarax.Foundation.Core.Logging;
  5. using Microsoft.Extensions.Logging;
  6. namespace Quadarax.Application.QLiberace.Processor.Workers
  7. {
  8. internal abstract class QlbrcProcessorWorker : LoopWorker
  9. {
  10. #region *** Private fields ***
  11. protected SettingsService _srvService;
  12. protected static int _workerOrdinalCounter = 0;
  13. #endregion
  14. #region *** Properties ***
  15. protected ProcessorSetting? Settings => GetSettings();
  16. #endregion
  17. #region *** Constructor ***
  18. protected QlbrcProcessorWorker(IWorkerContext context, SettingsService? srvSettings, string workerName, IQLogger logger) : base(workerName, context, logger)
  19. {
  20. _srvService = srvSettings ?? throw new ArgumentNullException(nameof(srvSettings));
  21. }
  22. #endregion
  23. #region *** Protected Operations ***
  24. protected string GetName(string workerPrefix)
  25. {
  26. if (string.IsNullOrEmpty(workerPrefix))
  27. workerPrefix = "Worker";
  28. var result = $"{workerPrefix}#{_workerOrdinalCounter}";
  29. Interlocked.Increment(ref _workerOrdinalCounter);
  30. return result;
  31. }
  32. #endregion
  33. #region *** Private Operations ***
  34. private ProcessorSetting? GetSettings()
  35. {
  36. var moduleCode = Base.Constants.Modules.Processor.Code;
  37. var result = _srvService.GetSettings<ProcessorSetting>(moduleCode);
  38. if (!result.IsSuccess){
  39. Log(LogSeverityEnum.Error, $"Cannot obtain settings for module '{moduleCode}'!",
  40. result.ToAggregateException());
  41. return null;
  42. }
  43. return result.Value;
  44. }
  45. #endregion
  46. }
  47. }