public bool IsValid(ReadOnlySpan <byte> data, FixMessageContext messageContext) { if (!data.Slice(0, SupportedFixVersion.TagAndPrefix.Length).SequenceEqual(SupportedFixVersion.TagAndPrefix)) { return(false); } int beginStringLength = data.IndexOf(Constants.SOHByte); var fixVersionValue = data.Slice(SupportedFixVersion.TagAndPrefix.Length, beginStringLength - SupportedFixVersion.TagAndPrefix.Length); if (!SupportedFixVersion.TryParseEnd(fixVersionValue, out var version)) { return(false); } messageContext.FixVersion = version; bool isValid = true; if (version == SupportedFixVersion.Fix50) { var slice = data.Slice(beginStringLength); isValid &= slice.IndexOf(KnownFixTags.SenderCompId) >= 0 && slice.IndexOf(KnownFixTags.TargetCompId) >= 0; } var msgTypeIndex = messageContext.MessageTypeTagStartIndex; var lengthIndex = messageContext.LengthTagStartIndex; isValid &= msgTypeIndex > 0 && lengthIndex >= 0; return(isValid); }
public void GivenInvalidSupportedFixVersionBytes_TryParse_ReturnsFalse() { var byteRepresentation = SupportedFixVersion.Fix50.ToString().ToByteValue(); var result = SupportedFixVersion.TryParse(byteRepresentation.AsSpan(1), out var parsed); Assert.False(result); }
public void GivenSupportedFixVersionBytes_Parse_ReturnsObject() { var byteRepresentation = SupportedFixVersion.Fix43.ToString().ToByteValue(); var parsed = SupportedFixVersion.Parse(byteRepresentation.AsSpan()); Assert.Equal(SupportedFixVersion.Fix43, parsed); }
public void GivenSupportedFixVersionBytes_TryParse_ReturnsTrue() { var byteRepresentation = SupportedFixVersion.Fix50.ToString().ToByteValue(); var result = SupportedFixVersion.TryParse(byteRepresentation.AsSpan(), out var parsed); Assert.Equal(SupportedFixVersion.Fix50, parsed); Assert.True(result); }
public MessageBuilder() { _version = SupportedFixVersion.Fix44; _availableLength = 256; _currentLength = 0; _converter = new FixTagValueConverter(); _builderArray = ArrayPool <byte> .Shared.Rent(_availableLength); _availableLength = _builderArray.Length; }
protected StreamParser(Pipe pipe, Stream stream, IMessageParser <T, byte> singleMessageParser, SupportedFixVersion fixVersion, Func <ReadOnlyMemory <byte>, T>?targetObjectFactory) : base(pipe.Reader, singleMessageParser, fixVersion, targetObjectFactory) { _stream = stream ?? throw new ArgumentNullException(nameof(stream)); _pipe = pipe ?? throw new ArgumentNullException(nameof(pipe)); }
public StreamParser(Stream stream, IMessageParser <T, byte> singleMessageParser, SupportedFixVersion fixVersion, Func <ReadOnlyMemory <byte>, T>?targetObjectFactory) : this(new Pipe(), stream, singleMessageParser, fixVersion, targetObjectFactory) { }
public StreamParser(Stream stream, IMessageParser <T, byte> singleMessageParser, SupportedFixVersion fixVersion) : this(stream, singleMessageParser, fixVersion, null) { }
public PipeParser(PipeReader pipeReader, IMessageParser <T, byte> singleMessageParser, SupportedFixVersion fixVersion, Func <ReadOnlyMemory <byte>, T>?targetObjectFactory) { _reader = pipeReader ?? throw new ArgumentNullException(nameof(pipeReader)); _messageParser = singleMessageParser ?? throw new ArgumentNullException(nameof(singleMessageParser)); _targetObjectFactory = targetObjectFactory; _fixVersion = new byte[fixVersion.Value.Length + 2]; int offset = Encoding.ASCII.GetBytes("8=".AsSpan(), _fixVersion); fixVersion.Value.CopyTo(_fixVersion.AsSpan().Slice(offset)); }
public PipeParser(Pipe pipe, IMessageParser <T, byte> singleMessageParser, SupportedFixVersion fixVersion, Func <ReadOnlyMemory <byte>, T>?targetObjectFactory) : this(pipe.Reader, singleMessageParser, fixVersion, targetObjectFactory) { }
public PipeParser(PipeReader pipeReader, IMessageParser <T, byte> singleMessageParser, SupportedFixVersion fixVersion) : this(pipeReader, singleMessageParser, fixVersion, null) { }
public MessageBuilder AddBeginString(SupportedFixVersion version) { _version = version; return(this); }
public void GivenInvalidSupportedFixVersionBytes_Parse_ThrowsNotSupportedException() { var byteRepresentation = SupportedFixVersion.Fix43.ToString().ToByteValue(); Assert.Throws <NotSupportedException>(() => SupportedFixVersion.Parse(byteRepresentation.AsSpan(1))); }