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); }
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); }
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); }
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); }