public EltradeFiscalDeviceResponsePackage Send(EltradeFiscalDeviceRequestPackage package)
        {
            if (ReferenceEquals(null, package))
            {
                throw new ArgumentNullException(nameof(package));
            }

            response = EltradeFiscalDeviceResponsePackage.Empty;
            try
            {
                serialPort.DataReceived += Read;

                var bytes = package.Build(true);
                reading = true;
                log.Debug($"0x{package.Command.ToString("x2").ToUpper()} => {package.GetType().Name} {package.DataString}");
                serialPort.Write(bytes, 0, bytes.Length);

                var wait = 0;
                while (reading && wait++ < 500) // mynkow
                {
                    Thread.Sleep(10);           // KnowHow: https://social.msdn.microsoft.com/Forums/en-US/ce8ce1a3-64ed-4f26-b9ad-e2ff1d3be0a5/serial-port-hangs-whilst-closing?forum=Vsexpressvcs
                }
                serialPort.DataReceived -= Read;

                if (response?.Data?.Length != 0)
                {
                    log.Debug($"0x{response.Command.ToString("x2").ToUpper()} Response => {response.GetHumanReadableData()}");
                }
            }
            catch (IOException ex)
            {
                log.Warn("Repopening port", ex);
                response = null;//mynkow
                Dispose();
                FindFiscalDevicePort();
            }
            catch (Exception ex)
            {
                log.Error("PAFA!", ex);
                response = null;//mynkow
                throw;
            }

            return(response);
        }
Exemplo n.º 2
0
        public EltradeTransaction Enqueue(EltradeFiscalDeviceRequestPackage request, Func <EltradeFiscalDeviceResponsePackage, bool> then)
        {
            if (request is null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (then is null)
            {
                requests.Enqueue(new RequestCallback(request));
            }
            else
            {
                requests.Enqueue(new RequestCallback(request, then));
            }

            return(this);
        }
Exemplo n.º 3
0
 public RequestCallback(EltradeFiscalDeviceRequestPackage request, Func <EltradeFiscalDeviceResponsePackage, bool> then)
 {
     Request = request ?? throw new ArgumentNullException(nameof(request));
     Then    = then;
 }
Exemplo n.º 4
0
 public EltradeTransaction Enqueue(EltradeFiscalDeviceRequestPackage request)
 {
     return(Enqueue(request, null));
 }
Exemplo n.º 5
0
 public RequestCallback(EltradeFiscalDeviceRequestPackage request)
 {
     Request = request ?? throw new ArgumentNullException(nameof(request));
 }