refactoring

This commit is contained in:
EugeneTes
2026-01-21 10:37:33 +01:00
parent cb231801f1
commit 5cef04bf92
11 changed files with 793 additions and 33 deletions

View File

@@ -2,5 +2,5 @@ using System.Threading.Tasks;
public interface IPrintService
{
Task<bool> PrintAsync(string printerIp, PrintJob job);
Task<PrintResult> PrintAsync(string printerIp, PrintJob job);
}

View File

@@ -0,0 +1,6 @@
public enum PrintErrorType
{
None,
ConversionError,
Other
}

View File

@@ -0,0 +1,14 @@
public class PrintResult
{
public bool Success { get; }
public PrintErrorType ErrorType { get; }
private PrintResult(bool success, PrintErrorType errorType)
{
Success = success;
ErrorType = errorType;
}
public static PrintResult Ok() => new(true, PrintErrorType.None);
public static PrintResult Fail(PrintErrorType errorType) => new(false, errorType);
}

View File

@@ -1,36 +1,35 @@
using Microsoft.Extensions.Logging;
using System.Collections.Concurrent;
using Microsoft.Extensions.Logging;
public class PrintServer
{
private readonly IPrintService _printService;
private readonly ILogger _logger;
private readonly Dictionary<string, PrinterQueue> _printerQueues;
private readonly ConcurrentDictionary<string, PrinterQueue> _printerQueues;
public PrintServer(IPrintService printService, ILogger logger)
{
_printService = printService;
_logger = logger;
_printerQueues = new Dictionary<string, PrinterQueue>();
_printerQueues = new ConcurrentDictionary<string, PrinterQueue>();
}
public void RegisterPrinter(string printerIp)
{
if (_printerQueues.ContainsKey(printerIp))
return;
var queue = new PrinterQueue(printerIp, _printService,_logger);
_printerQueues[printerIp] = queue;
queue.Start();
Console.WriteLine($"Printer {printerIp} registered");
var queue = new PrinterQueue(printerIp, _printService, _logger);
if (_printerQueues.TryAdd(printerIp, queue))
{
queue.Start();
Console.WriteLine($"Printer {printerIp} registered");
}
}
public void UnregisterPrinter(string printerIp)
{
if (_printerQueues.TryGetValue(printerIp, out var queue))
if (_printerQueues.TryRemove(printerIp, out var queue))
{
queue.StopAsync().Wait();
_printerQueues.Remove(printerIp);
Console.WriteLine($"Printer {printerIp} unregistered");
}
}

View File

@@ -73,15 +73,22 @@ public class PrinterQueue
try
{
// Call the actual print function
bool success = await _printService.PrintAsync(PrinterIp, job);
var result = await _printService.PrintAsync(PrinterIp, job);
if (!success)
if (!result.Success)
{
// Re-queue with retry logic
job.RetryCount++;
_logger.LogWarning("Job failed, retrying ({RetryCount}/3)", job.RetryCount);
await Task.Delay(5000, cancellationToken); // Wait before retry
EnqueuePriority(job);
if (result.ErrorType == PrintErrorType.ConversionError)
{
_logger.LogWarning("Job failed due to conversion error, not re-queuing");
}
else
{
// Re-queue with retry logic
job.RetryCount++;
_logger.LogWarning("Job failed, retrying ({RetryCount}/3)", job.RetryCount);
await Task.Delay(5000, cancellationToken); // Wait before retry
EnqueuePriority(job);
}
}
else
{