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

@@ -0,0 +1,26 @@
using Inspectron.Epson;
namespace EpsonPrintService;
/// <summary>
/// Simple console implementation that logs discovered printers to the console
/// </summary>
public class ConsoleDiscoveredPrintersReceiver : IDiscoveredPrintersReceiver
{
public Task OnPrintersDiscoveredAsync(IReadOnlyList<DiscoveredPrinter> printers)
{
Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] Discovered printers changed. Found {printers.Count} printer(s):");
foreach (var printer in printers)
{
Console.WriteLine($" - {printer.IPAddress}");
}
if (printers.Count == 0)
{
Console.WriteLine(" (no printers found)");
}
return Task.CompletedTask;
}
}

View File

@@ -0,0 +1,15 @@
using Inspectron.Epson;
namespace EpsonPrintService;
/// <summary>
/// Interface for receiving discovered printer updates
/// </summary>
public interface IDiscoveredPrintersReceiver
{
/// <summary>
/// Called when the list of discovered printers has changed
/// </summary>
/// <param name="printers">The current list of discovered printers</param>
Task OnPrintersDiscoveredAsync(IReadOnlyList<DiscoveredPrinter> printers);
}

View File

@@ -0,0 +1,55 @@
using Inspectron.Epson;
using Inspectron.Epson.PrintServer.ConfigurationSources;
using System.Net.Http.Json;
namespace EpsonPrintService;
public class JamesDiscoveredPrintersReceiver: IDiscoveredPrintersReceiver
{
private readonly EpsonPrintServiceConfiguration _configuration;
private readonly HttpClient _httpClient;
public JamesDiscoveredPrintersReceiver(EpsonPrintServiceConfiguration configuration, HttpClient httpClient)
{
_configuration = configuration;
_httpClient = httpClient;
}
public async Task OnPrintersDiscoveredAsync(IReadOnlyList<DiscoveredPrinter> printers)
{
var apiKey = _configuration.ApiKey;
var request = new DiscoveredPrintersRequest
{
Printers = printers.Select(p => new DiscoveredPrinterDto
{
PrinterId = p.IPAddress,
Name = p.IPAddress,
Address = p.IPAddress,
Model = p.ModelName,
IsMain = false
}).ToList()
};
using var requestMessage = new HttpRequestMessage(HttpMethod.Post, "https://api.dev.gastrojames.ch/api/printerServer/discovered-printers");
requestMessage.Headers.Add("X-Printer-Server-Key", apiKey);
requestMessage.Content = JsonContent.Create(request);
var response = await _httpClient.SendAsync(requestMessage);
response.EnsureSuccessStatusCode();
}
private class DiscoveredPrintersRequest
{
public List<DiscoveredPrinterDto> Printers { get; set; } = new();
}
private class DiscoveredPrinterDto
{
public string PrinterId { get; set; } = "";
public string Name { get; set; } = "";
public string Address { get; set; } = "";
public string Model { get; set; } = "";
public bool IsMain { get; set; }
}
}