public PrinterServiceProvider(XFS4IoTServer.EndpointDetails EndpointDetails, IPrinterDevice Device, ILogger Logger)
            : base(typeof(PrinterServiceProvider), Logger)
        {
            EndpointDetails.IsNotNull($"The endpoint details are invalid. {nameof(EndpointDetails)}");
            Device.IsNotNull($"The device interface is an invalid. {nameof(Device)}");

            this.Device = Device;

            (Uri, WSUri) = EndpointDetails.ServiceUri(ServiceClass);

            Logger.Log(Constants.Framework, $"Listening on {Uri}");

            this.EndPoint = new EndPoint(Uri,
                                         CommandDecoder,
                                         this,
                                         Logger);
        }
        protected void DeleteJobsOnPrinter(IPrinterDevice printerDevice)
        {
            for (; ;)
            {
                if (StopNow)
                {
                    return;
                }

                Logger.DebugFormat("fetching deletable jobs for {0}", printerDevice);

                ICollection <string> jobsToDelete;
                try
                {
                    jobsToDelete = printerDevice.GetFailedJobIDs();
                    foreach (var jobToDelete in jobsToDelete)
                    {
                        Logger.InfoFormat("deleting job {1} on printer {0}", printerDevice, jobToDelete);
                        printerDevice.DeleteFailedJob(jobToDelete);
                    }
                }
                catch (WebException we)
                {
                    Logger.WarnFormat("WebException while contacting {0}: {1}", printerDevice, we);
                    // next printer
                    break;
                }

                if (StopNow || jobsToDelete.Count == 0)
                {
                    return;
                }

                try
                {
                    Logger.Debug("Repetition delay.");
                    Thread.Sleep(TimeSpan.FromSeconds(_config.CheckRepetitionDelayInSeconds));
                }
                catch (ThreadInterruptedException)
                {
                    Logger.Debug("Interrupted!");
                }
            }
        }