示例#1
0
        /// <summary>
        /// Decode RawData type (for SimpleTypeDescription!?)
        /// </summary>
        /// <param name="binaryDecoder"></param>
        /// <param name="fieldMetaData"></param>
        /// <returns></returns>
        private object DecodeRawData(BinaryDecoder binaryDecoder, FieldMetaData fieldMetaData)
        {
            if (fieldMetaData.BuiltInType != 0)// && fieldMetaData.DataType.Equals(new NodeId(fieldMetaData.BuiltInType)))
            {
                try
                {
                    switch (fieldMetaData.ValueRank)
                    {
                    case ValueRanks.Scalar:
                        return(DecodeRawScalar(binaryDecoder, fieldMetaData.BuiltInType));

                    case ValueRanks.OneDimension:
                    case ValueRanks.TwoDimensions:
                        return(binaryDecoder.ReadArray(null, fieldMetaData.ValueRank, (BuiltInType)fieldMetaData.BuiltInType));

                    case ValueRanks.OneOrMoreDimensions:
                    case ValueRanks.Any:    // Scalar or Array with any number of dimensions
                    case ValueRanks.ScalarOrOneDimension:
                    // not implemented

                    default:
                        Utils.Trace("Decoding ValueRank = {0} not supported yet !!!", fieldMetaData.ValueRank);
                        break;
                    }
                }
                catch (Exception ex)
                {
                    Utils.Trace(ex, "Error reading element for RawData.");
                    return(StatusCodes.BadDecodingError);
                }
            }
            return(null);
        }
示例#2
0
 public void TestArray(IList <string> expected)
 {
     using (var stream = new MemoryStream())
         using (var encoder = new BinaryEncoder(stream))
             using (var decoder = new BinaryDecoder(stream))
             {
                 encoder.WriteArray(expected, (s, e) => s.WriteString(e));
                 stream.Seek(0, SeekOrigin.Begin);
                 var actual = decoder.ReadArray(s => s.ReadString());
                 Assert.AreEqual(expected, actual);
             }
 }
        public void DecodeArray(IList <int> expectedValue, int expectedLength, byte[] value)
        {
            using (var stream = new MemoryStream(value))
                using (var decoder = new BinaryDecoder(stream))
                {
                    var decode = decoder.ReadArray(s => s.ReadInt());
                    Assert.AreEqual(expectedLength, stream.Position, "Decode offset error");
                    Assert.AreEqual(expectedValue, decode);

                    stream.Seek(0, SeekOrigin.Begin);
                    decoder.SkipArray(s => s.SkipInt());
                    Assert.AreEqual(expectedLength, stream.Position, "Skip offset error");
                }
        }