Esempio n. 1
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            _printingHubProxy.OnRequestInstalledPrintersAsync = async() =>
            {
                var printers = Printers.GetInstalledPrinters();
                _logger.LogInformation("Reporting {PrinterCount} printers to dispatcher", printers.Length);
                await _printingHubProxy.SetInstalledPrintersAsync(printers);
            };
            _printingHubProxy.OnSpoolJobAsync = job =>
            {
                _queue.Add(job);
                return(Task.CompletedTask);
            };

            await _printingHubProxy.StartAsync(stoppingToken);

            _logger.LogInformation("Sending hello");
            await _printingHubProxy.Hello(Assembly.GetEntryAssembly().GetName().Version.ToString(3));

            var printers = Printers.GetInstalledPrinters();

            _logger.LogInformation("Reporting {PrinterCount} printers to dispatcher", printers.Length);
            await _printingHubProxy.SetInstalledPrintersAsync(printers);

            _logger.LogInformation("Starting job processing");
            foreach (var job in _queue.GetConsumingEnumerable(stoppingToken))
            {
                _logger.LogInformation("Got {JobSize} {ContentType} job for printer {PrinterName}", job.Content.Length, job.ContentType, job.PrinterName);

                if (TryGetPrinterHandle(job.PrinterName, job.ContentType, out var printerHandle))
                {
                    try
                    {
                        printerHandle.Print(job.Content);
                    }
                    catch (PrinterException e)
                    {
                        _logger.LogError(e, "Unable to print");
                    }
                }
                else
                {
                    _logger.LogWarning("Unable to get printer handle");
                }
            }
        }