Ejemplo n.º 1
0
        public void ParseNext_WhenBufferContainsUnsignedString_ReturnsExpectedTypedDataTypeAndValue()
        {
            // arrange
            int offset = 0;

            // 00010000 11000000 10000110 01000110 11000110
            BitArray ba = new BitArray(
                new bool[] {
                false, false, false, true, false, false, false, false,
                true, true, false, false, false, false, false, false,
                true, false, false, false, false, true, true, false,
                false, true, false, false, false, true, true, false,
                true, true, false, false, false, true, true, false
            });

            byte[] buffer = new byte[5];
            ba.CopyTo(buffer, 0);

            // act
            TypedData result = TypedDataParser.ParseNext(buffer, ref offset);

            // assert
            Assert.AreEqual(DataType.String, result.Type);
            Assert.AreEqual("abc", result.Value);
        }
Ejemplo n.º 2
0
        internal override void Parse(byte[] buffer, ref int offset)
        {
            while (offset < buffer.Length)
            {
                VariableInt messageNameLength = VariableInt.DecodeVariableInt(buffer.Skip(offset).ToArray());
                offset += messageNameLength.Length;

                string messageName = Encoding.ASCII.GetString(buffer, offset, (int)messageNameLength.Value);
                offset += messageName.Length;

                byte numberOfArgs = buffer.Skip(offset).Take(1).First();
                offset++;

                var message = new SpoeMessage(messageName);

                for (byte i = 0; i < numberOfArgs; i++)
                {
                    VariableInt keyNameLength = VariableInt.DecodeVariableInt(buffer.Skip(offset).ToArray());
                    offset += keyNameLength.Length;

                    string keyname = Encoding.ASCII.GetString(buffer, offset, (int)keyNameLength.Value);
                    offset += keyname.Length;

                    TypedData data = TypedDataParser.ParseNext(buffer, ref offset);
                    message.Args.Add(keyname, data);
                }

                this.Messages.Add(message);
            }
        }
Ejemplo n.º 3
0
        public void ParseNext_WhenBufferContainsBinary_ReturnsExpectedTypedDataTypeAndValue()
        {
            // arrange
            int offset = 0;

            // act
            // 10010000 11100000 01100110 11110110 11110110 10111100 01000110 10000110 01001110
            BitArray ba = new BitArray(
                new bool[] {
                true, false, false, true, false, false, false, false,
                true, true, true, false, false, false, false, false,
                false, true, true, false, false, true, true, false,
                true, true, true, true, false, true, true, false,
                true, true, true, true, false, true, true, false,
                true, false, true, true, true, true, false, false,
                false, true, false, false, false, true, true, false,
                true, false, false, false, false, true, true, false,
                false, true, false, false, true, true, true, false
            });

            byte[] buffer = new byte[9];
            ba.CopyTo(buffer, 0);

            TypedData result = TypedDataParser.ParseNext(buffer, ref offset);

            // assert
            Assert.AreEqual(DataType.Binary, result.Type);
            Assert.AreEqual("Zm9vPWJhcg==", result.ToString()); // base64 foo=bar
        }
Ejemplo n.º 4
0
        internal override void Parse(byte[] buffer, ref int offset)
        {
            while (offset < buffer.Length)
            {
                // key-value format: [length-of-keyname(varint)][keyname][datatype][value]
                VariableInt keyNameLength = VariableInt.DecodeVariableInt(buffer.Skip(offset).ToArray());
                offset += keyNameLength.Length;

                string keyname = Encoding.ASCII.GetString(buffer, offset, (int)keyNameLength.Value);
                offset += keyname.Length;

                TypedData data = TypedDataParser.ParseNext(buffer, ref offset);
                this.KeyValueItems.Add(keyname, data);
            }
        }
Ejemplo n.º 5
0
        public void ParseNext_WhenBufferContainsBoolean_ReturnsExpectedTypedDataTypeAndValue()
        {
            // arrange
            int offset = 0;

            // 10001000
            BitArray ba = new BitArray(
                new bool[] { true, false, false, false, true, false, false, false });

            byte[] buffer = new byte[4];
            ba.CopyTo(buffer, 0);

            // act
            TypedData result = TypedDataParser.ParseNext(buffer, ref offset);

            // assert
            Assert.AreEqual(DataType.Boolean, result.Type);
            Assert.AreEqual(true, result.Value);
        }