Compartilhar via


Exemplo de saída assíncrona (documentação do SDK do POS for .NET v1.14)

O Microsoft Point of Service for .NET (POS for .NET) dá suporte à saída assíncrona em conformidade com a especificação Unified Point Of Service (UnifiedPOS). No modelo de saída assíncrona, o Objeto de Serviço deve enfileirar solicitações de saída para que possa retornar o controle para o aplicativo o mais rápido possível. Em seguida, um segundo thread deve expedir a saída para o dispositivo e notificar os aplicativos quando a solicitação tiver sido atendida, seja com um OutputCompleteEvent, seja com um evento ErrorEvent.

A biblioteca de classes do POS for .NET manipula a maioria dessas funções para o desenvolvedor do Objeto de Serviço para que haja pouca, se houver, diferença entre um dispositivo de saída assíncrona e um dispositivo somente de saída síncrona.

Para criar o projeto

  1. Crie um projeto de biblioteca de classes do Visual Studio.

  2. Adicione o exemplo de código abaixo ao seu projeto.

  3. Adicione referências aos assemblies Microsoft.PointOfService.

  4. Compile e copie o Objeto de Serviço para um dos diretórios no caminho de carregamento do assembly do Objeto de Serviço.

Para usar o exemplo de aplicativo com o Objeto de Serviço

Exemplo

Para gerar uma saída para um dispositivo PosPrinter, um aplicativo geralmente usará o método PrintNormal(PrinterStation, String). Observe que o código objeto de serviço PosPrinter abaixo não fornece uma implementação para esse método. Em vez disso, PrintNormalImpl(PrinterStation, PrinterState, String) é implementado. Esse método é chamado pela biblioteca do POS for .NET para solicitações de saída síncronas e assíncronas.

Quando um aplicativo chama um método de saída, como PrintNormal, a implementação do POS for .NET verifica o valor da propriedade AsyncMode. Se esse valor for false, a biblioteca do POS for .NET enviará a solicitação para PrintNormalImpl imediatamente e aguardará o retorno. No entanto, se o valor for true, a implementação do POS for .NET do PrintNormal adicionará a solicitação a uma fila gerenciada internamente. Embora haja itens na fila, um thread gerenciado do POS for .NET enviará cada solicitação, em ordem FIFO (primeiro a entrar, primeiro a sair), para o dispositivo ao chamar PrintNormalImpl. Quando PrintNormalImpl retornar, a implementação da biblioteca gerará um OutputCompleteEvent no aplicativo. Em suma, o mesmo código do Objeto de Serviço pode dar suporte à saída síncrona e assíncrona sem precisar saber qual modo de saída está sendo usado.

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using Microsoft.PointOfService;
using Microsoft.PointOfService.BaseServiceObjects;

[assembly: PosAssembly("Service Object Contractors, Inc.")]

namespace SOSamples.AsyncOutput
{
    [ServiceObject(
            DeviceType.PosPrinter,
            "AsyncOutputPrinter",
            "Sample Async Printer",
            1,
            9)]

    public class AsyncOutputSimulator : PosPrinterBase
    {
        public AsyncOutputSimulator()
        {
            DevicePath = "Sample Async Printer";

            // Indicate that the Service Object supports
            // the receipt printer.
            Properties.CapRecPresent = true;
        }

        // Note that this method will be called by the POS for .NET
        // library code, regardless of whether the print request
        // is synchronous or asynchronous. The print request
        // queue is managed completely by POS for .NET so the
        // Service Object should simply write data to the device
        // here.
        protected override PrintResults PrintNormalImpl(
                        PrinterStation station,
                        PrinterState printerState,
                        string data)
        {
            // Your code to print to the actual hardware would go
            // here.

            // For demonstration, however, the code simulates
            // that fulfilling this print request took 4 seconds.
            Thread.Sleep(4000);

            PrintResults results = new PrintResults();
            return results;
        }

        // This method must be implemented by the Service
        // Object, and should validate the data to be printed,
        // including any escape sequences. This method should throw
        // a PosControlException to indicate failure.
        protected override void ValidateDataImpl(
                        PrinterStation station,
                        string data)
        {
            // Insert your validation code here.
            return;
        }

        #region Implement Abstract PosCommon Members
        private string MyHealthText = "";

        // PosCommon.CheckHealthText.
        public override string CheckHealthText
        {
            get
            {
                // VerifyState(mustBeClaimed,
                // mustBeEnabled).
                VerifyState(false, false);
                return MyHealthText;
            }
        }

        //  PosCommon.CheckHealth.
        public override string CheckHealth(
                        HealthCheckLevel level)
        {
            // Verify that device is open, claimed, and enabled.
            VerifyState(true, true);

            // Insert your code here:
            // check the health of the device and return a
            // descriptive string.

            // Cache result in the CheckHealthText property.
            MyHealthText = "Ok";
            return MyHealthText;
        }

        // PosCommon.DirectIOData.
        public override DirectIOData DirectIO(
                                int command,
                                int data,
                                object obj)
        {
            // Verify that the device is open.
            VerifyState(false, false);

            return new DirectIOData(data, obj);
        }
        #endregion Implement Abstract PosCommon Members
    }
}

O código do aplicativo no Exemplo de Manipulador de Eventos pode ser compilado e executado com este Objeto de Serviço.

Consulte Também

Tarefas

Conceitos

Outros recursos