Exemple #1
0
 public static IEnumerable <Packet> ParsePackets(this BinaryStringReader binaryString)
 {
     do
     {
         yield return(binaryString.GetNextPacket());
     } while (binaryString.HasMorePackets);
 }
Exemple #2
0
        public static IEnumerable <(string, string)> ReadProperties([CanBeNull] string input, [CanBeNull] Action <string, Exception> errorCallback)
        {
            if (input == null)
            {
                return(Array.Empty <(string, string)>());
            }

            try
            {
                var properties = new List <(string, string)>();
                var reader     = new BinaryStringReader(Convert.FromBase64String(input));

                while (reader.HasDataLeft)
                {
                    var name  = reader.Read();
                    var value = reader.Read();

                    properties.Add((name, value));
                }

                return(properties);
            }
            catch (Exception error)
            {
                errorCallback?.Invoke($"Failed to read property names and values from input string '{input}'.", error);

                return(Array.Empty <(string, string)>());
            }
        }
        public void Reader_should_correctly_read_strings_written_by_writer()
        {
            var writer = new BinaryStringWriter(1);

            writer.Write("");
            writer.Write("Hello!");
            writer.Write("Привет!");

            var base64 = writer.ToBase64String();

            var reader = new BinaryStringReader(Convert.FromBase64String(base64));

            reader.Read().Should().Be("");
            reader.Read().Should().Be("Hello!");
            reader.Read().Should().Be("Привет!");

            reader.HasDataLeft.Should().BeFalse();
        }
Exemple #4
0
        public Packet GetNextPacket()
        {
            var version = TakeInt64(3);
            var typeId  = TakeInt64(3);

            if (typeId == 4)
            {
                return(new LiteralValue(version, typeId, TakeLiteralValue()));
            }

            var lengthTypeId = TakeInt64(1);

            if (lengthTypeId == 0)
            {
                var totalLength = TakeInt64(15);

                BinaryStringReader valuePacket = TakeBinaryString((int)totalLength);

                var subPackets = valuePacket.ParsePackets().ToList();

                return(new Operator(version, typeId, subPackets));
            }

            if (lengthTypeId == 1)
            {
                long totalPackets = TakeInt64(11);

                List <Packet> subPackets = new List <Packet>();

                for (int i = 0; i < totalPackets; i++)
                {
                    subPackets.Add(GetNextPacket());
                }

                return(new Operator(version, typeId, subPackets));
            }

            throw new NotImplementedException();
        }