Exemple #1
0
        private IFiscalResponse SendMessage(IWrappedMessage msg, Func <byte[], IFiscalResponse> responseFactory)
        {
            if (_innerReadStatusExecuted)
            {
                return(_SendMessage(msg, responseFactory));
            }

            _SendMessage(new ReadStatusCommand(), bytes => null);
            _innerReadStatusExecuted = true;
            return(_SendMessage(msg, responseFactory));
        }
        /// <summary>
        /// Wrap the given content in another type and send over this session.
        /// </summary>
        /// <param name="wrapType">the (mime-)type to wrap it in.</param>
        /// <param name="from">from-field</param>
        /// <param name="to">to-field</param>
        /// <param name="contentType">the (mime-)type to wrap.</param>
        /// <param name="content">actual content</param>
        /// <returns>the message-object that will be send, can be used
        ///     to abort large content.</returns>
        public OutgoingMessage SendWrappedMessage(string wrapType, string from, string to, string contentType, byte[] content)
        {
            Wrap wrap = Wrap.GetInstance();

            if (wrap.IsWrapperType(wrapType))
            {
                IWrappedMessage wm = wrap.GetWrapper(wrapType);
                return(SendMessage(new OutgoingMessage(wrapType, wm.Wrap(from, to, contentType, content))));
            }
            return(null);
        }
Exemple #3
0
        private IFiscalResponse _SendMessage(IWrappedMessage msg, Func <byte[], IFiscalResponse> responseFactory)
        {
            IFiscalResponse response = null;

            byte[] lastStatusBytes = null;
            var    packet          = msg.GetBytes(_sequence);

            for (var r = 0; r < 3; r++)
            {
                try
                {
                    _port.Write(packet, 0, packet.Length);
                    var list = new List <byte>();

                    while (ReadByte())
                    {
                        var b = _queue.Dequeue();
                        if (b == 22)
                        {
                            continue;
                        }
                        if (b == 21)
                        {
                            throw new IOException("Invalid packet checksum or form of messsage.");
                        }
                        list.Add(b);
                    }

                    list.Add(_queue.Dequeue());
                    var buffer = list.ToArray();
                    response        = responseFactory(buffer);
                    lastStatusBytes = list.Skip(list.IndexOf(0x04) + 1).Take(6).ToArray();
                    break;
                }
                catch (Exception)
                {
                    if (r >= 2)
                    {
                        throw;
                    }
                }
            }
            _sequence += 1;
            if (_sequence > 254)
            {
                _sequence = 32;
            }
            if (msg.Command != 74)
            {
                checkStatusOnErrors(lastStatusBytes);
            }
            return(response);
        }
        public override Message Validate()
        {
            if (From != null)
            {
                Wrap            wrap       = Wrap.GetInstance();
                IWrappedMessage wm         = wrap.GetWrapper(Header.CPIM_TYPE);
                byte[]          newContent = wm.Wrap(From, To, ContentType, DataContainer.Get(0, Size));
                ContentType   = Header.CPIM_TYPE;
                DataContainer = new MemoryDataContainer(newContent);
                Size          = newContent.Length;
            }

            return(this);
        }
Exemple #5
0
        public IFiscalResponse SendMessage(IWrappedMessage msg, Func <byte[], IFiscalResponse> responseFactory, int sequence)
        {
            IFiscalResponse response = null;

            byte[] lastStatusBytes = null;
            var    packet          = msg.GetBytes(sequence);

            for (var r = 0; r < 3; r++)
            {
                try
                {
                    _serialPort.Write(packet, 0, packet.Length);
                    var list = new List <byte>();

                    while (ReadByte())
                    {
                        var b = _queue.Dequeue();
                        if (b == 22)
                        {
                            continue;
                        }
                        if (b == 21)
                        {
                            throw new IOException("Invalid packet checksum or form of messsage.");
                        }
                        list.Add(b);
                    }

                    list.Add(_queue.Dequeue());
                    var buffer = list.ToArray();
                    response        = responseFactory(buffer);
                    lastStatusBytes = list.Skip(list.IndexOf(0x04) + 1).Take(6).ToArray();
                    break;
                }
                catch (Exception)
                {
                    if (r >= 2)
                    {
                        throw;
                    }
                    _queue.Clear();
                }
            }
            if (msg.Command != 74)
            {
                Helpers.ThrowErrorOnBadStatus.Check(lastStatusBytes);
            }
            return(response);
        }
Exemple #6
0
        private IFiscalResponse ExecuteCommand(IWrappedMessage msg, Func <byte[], IFiscalResponse> responseFactory)
        {
            if (!_innerReadStatusExecuted)
            {
                _communicator.SendMessage(new ReadStatusCommand(), bytes => null, 32);
                _innerReadStatusExecuted = true;
            }
            var response = _communicator.SendMessage(msg, responseFactory, _sequence);

            _sequence += 1;
            if (_sequence > 254)
            {
                _sequence = 33;
            }
            return(response);
        }