print server with new concept

This commit is contained in:
EugeneTes
2026-01-16 12:00:24 +01:00
parent 147265358f
commit 5229cac987
30 changed files with 694 additions and 217 deletions

View File

@@ -1,13 +1,15 @@
public class PrintJob
using static Inspectron.Epson.PrintServer.JobSources.SignalRPrintJobSource;
public class PrintJob
{
public string AreaId { get; set; }
public string Document { get; set; }
// todo: change to ip address
public string IP { get; set; }
public PrintJobFromSignalR Document { get; set; }
public DateTime QueuedAt { get; set; }
public int RetryCount { get; set; }
public PrintJob()
{
AreaId = Guid.NewGuid().ToString();
QueuedAt = DateTime.UtcNow;
RetryCount = 0;
}

View File

@@ -34,7 +34,7 @@ public class PrinterQueue
{
_queue.Enqueue(job);
_signal.Release(); // Signal that there's work to do
_logger.LogInformation("Job {JobId} queued for printer {PrinterId}. Queue length: {QueueLength}", job.AreaId, PrinterIp, QueueLength);
_logger.LogInformation("Job queued for printer {PrinterId}. Queue length: {QueueLength}", PrinterIp, QueueLength);
}
public void Start()
@@ -50,7 +50,7 @@ public class PrinterQueue
{
_priorityQueue.Push(job);
_signal.Release();
_logger.LogInformation("Job {JobId} priority queued for printer {PrinterId}. Queue length: {QueueLength}", job.AreaId, PrinterIp, QueueLength);
_logger.LogInformation("Job priority queued for printer {PrinterId}. Queue length: {QueueLength}", PrinterIp, QueueLength);
}
private async Task ProcessQueueAsync(CancellationToken cancellationToken)
{
@@ -68,7 +68,7 @@ public class PrinterQueue
if (job!=null)
{
_logger.LogInformation("Processing job {JobId} on printer {PrinterId}", job.AreaId, PrinterIp);
_logger.LogInformation("Processing job on printer {PrinterId}", PrinterIp);
try
{
@@ -79,18 +79,18 @@ public class PrinterQueue
{
// Re-queue with retry logic
job.RetryCount++;
_logger.LogWarning("Job {JobId} failed, retrying ({RetryCount}/3)", job.AreaId, job.RetryCount);
_logger.LogWarning("Job failed, retrying ({RetryCount}/3)", job.RetryCount);
await Task.Delay(5000, cancellationToken); // Wait before retry
EnqueuePriority(job);
}
else
{
_logger.LogInformation("Job {JobId} completed successfully on printer {PrinterId}", job.AreaId, PrinterIp);
_logger.LogInformation("Job completed successfully on printer {PrinterId}", PrinterIp);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Error processing job {JobId}", job.AreaId);
_logger.LogError(ex, "Error processing job");
// Handle exception (retry, log, etc.)
}
}