/// <summary> /// Print-Job Request /// https://tools.ietf.org/html/rfc2911#section-3.2.1.1 /// </summary> /// <param name="request"></param> public IppRequestMessage Construct(PrintJobRequest request) { if (request.Document == null) { throw new ArgumentException($"{nameof(request.Document)} must be set"); } return(ConstructIppRequest(request)); }
public async Task PrintJobAsync_Simple() { var file = Path.Combine(TestContext.CurrentContext.WorkDirectory, "Resources", "word-2-pages.pdf"); await using var stream = new FileStream(file, FileMode.Open, FileAccess.Read); var request = new PrintJobRequest { PrinterUri = Options.Value.PrinterUrl, Document = stream }; await TestRequestAsync(request, (client, r) => client.PrintJobAsync(r)); }
public static async Task QueuePrintJobAsync(ConnectionMultiplexer redis, PrintJobRequest job) { var db = redis.GetDatabase(); var subscriber = redis.GetSubscriber(); var queue = RedisConstants.Queues.PrintJobQueue(job.SpoolerId); var jobJson = JsonSerializer.Serialize(job); await db.ListRightPushAsync(queue, jobJson); await subscriber.PublishAsync(RedisConstants.Channels.JobCreated, queue); }
public void PrintJobAsync_Simple() { var file = Path.Combine(TestContext.CurrentContext.WorkDirectory, "Resources", "word-2-pages.pdf"); using var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read); var request = new PrintJobRequest { PrinterUri = PrinterUrl, Document = fileStream }; var result = _protocol.Construct(request); CheckResult(result); }
private async Task HandlePrintJobAsync(PrintJobRequest request) { var db = _redis.GetDatabase(); var connectionId = await db.HashGetAsync(RedisConstants.ConnectedClients, request.SpoolerId); if (connectionId.HasValue) { var spoolerClient = _printingHubContext.Clients.Client(connectionId); await spoolerClient.SpoolJob(new SpoolerJob() { PrinterName = request.PrinterName, ContentType = request.ContentType, Content = request.Content }); } else { throw new Exception("Spooler is not connected"); // This effectively re-adds the job to the queue } }
public override async Task <ActionResult> HandleAsync(Command request, CancellationToken cancellationToken) { var projectId = User.GetProjectId(); var document = await _db.Documents.FirstOrDefaultAsync(x => x.ProjectId == projectId && x.Id == request.DocumentId); if (document is null) { return(NotFound()); } PrinterRoute route = null; if (User.TryGetTerminalId(out var terminalId)) { route = await GetPrinterByTerminal(projectId, terminalId, request.Route); } if (route is null && User.TryGetZoneId(out var zoneId)) { route = await GetPrinterByZone(projectId, zoneId, request.Route); } if (route is null) { return(BadRequest("Printer not found from route")); } var job = new PrintJobRequest() { SpoolerId = route.SpoolerId, PrinterName = route.PrinterName, ContentType = document.ContentType, Content = document.Content }; await PrintHelpers.QueuePrintJobAsync(_redis, job); return(Accepted()); }
public void PrintJobAsync_Full() { var file = Path.Combine(TestContext.CurrentContext.WorkDirectory, "Resources", "EmptyTwoPage.pdf"); using var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read); var request = new PrintJobRequest { PrinterUri = PrinterUrl, Document = fileStream, DocumentAttributes = new DocumentAttributes { DocumentName = "Document Name", DocumentFormat = "application/octet-stream", DocumentNaturalLanguage = "en" }, NewJobAttributes = new NewJobAttributes { JobName = "Test Job", IppAttributeFidelity = false, // JobPriority = 50, //unsupported most of the time // JobHoldUntil = JobHoldUntil.NoHold //unsupported most of the time MultipleDocumentHandling = MultipleDocumentHandling.SeparateDocumentsCollatedCopies, Copies = 1, Finishings = Finishings.None, PageRanges = new[] { new Range(1, 2) }, Sides = Sides.OneSided, NumberUp = 1, OrientationRequested = Orientation.Portrait, PrinterResolution = new Resolution(600, 600, ResolutionUnit.DotsPerInch), PrintQuality = PrintQuality.Normal, PrintScaling = PrintScaling.Fit } }; var result = _protocol.Construct(request); CheckResult(result); }
public override async Task <ActionResult> HandleAsync(Command request, CancellationToken cancellationToken) { var projectId = User.GetProjectId(); if (!await _db.Spoolers.AnyAsync(x => x.Zone.ProjectId == projectId && x.Id == request.SpoolerId)) { return(NotFound()); } using var body = new MemoryStream(); await Request.Body.CopyToAsync(body); var job = new PrintJobRequest() { SpoolerId = request.SpoolerId, PrinterName = request.PrinterName, ContentType = Request.ContentType, Content = body.ToArray() }; await PrintHelpers.QueuePrintJobAsync(_redis, job); return(Accepted()); }
/// <summary> /// Print-Job Operation /// https://tools.ietf.org/html/rfc2911#section-3.2.1 /// </summary> /// <param name="request"></param> /// <returns></returns> public async Task <PrintJobResponse> PrintJobAsync(PrintJobRequest request) { return(await SendAsync(request.PrinterUri, () => _ippProtocol.Construct(request), ippResponse => _ippProtocol.ConstructPrintJobResponse(ippResponse))); }