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);
        }
Exemple #5
0
        public MessageBuilder()
        {
            _version         = SupportedFixVersion.Fix44;
            _availableLength = 256;
            _currentLength   = 0;
            _converter       = new FixTagValueConverter();
            _builderArray    = ArrayPool <byte> .Shared.Rent(_availableLength);

            _availableLength = _builderArray.Length;
        }
Exemple #6
0
 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));
 }
Exemple #7
0
 public StreamParser(Stream stream, IMessageParser <T, byte> singleMessageParser, SupportedFixVersion fixVersion, Func <ReadOnlyMemory <byte>, T>?targetObjectFactory)
     : this(new Pipe(), stream, singleMessageParser, fixVersion, targetObjectFactory)
 {
 }
Exemple #8
0
 public StreamParser(Stream stream, IMessageParser <T, byte> singleMessageParser, SupportedFixVersion fixVersion)
     : this(stream, singleMessageParser, fixVersion, null)
 {
 }
Exemple #9
0
        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));
        }
Exemple #10
0
 public PipeParser(Pipe pipe, IMessageParser <T, byte> singleMessageParser, SupportedFixVersion fixVersion, Func <ReadOnlyMemory <byte>, T>?targetObjectFactory)
     : this(pipe.Reader, singleMessageParser, fixVersion, targetObjectFactory)
 {
 }
Exemple #11
0
 public PipeParser(PipeReader pipeReader, IMessageParser <T, byte> singleMessageParser, SupportedFixVersion fixVersion)
     : this(pipeReader, singleMessageParser, fixVersion, null)
 {
 }
Exemple #12
0
 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)));
        }