Beispiel #1
0
        public void RequestMessageConsistencyTest()
        {
            var original = new Request()
            {
                Id = Guid.NewGuid(),
                Data = new byte[] { 0xAA, 0xBB, 0xCC, 0xDD }
            };

            // Serializing
            var serializer = new MessageSerializingVisitor();
            original.Accept(serializer);
            var serializedData = serializer.Result;
            Assert.NotNull(serializedData);
            Assert.True(serializedData.Length > 0);

            // Deserializing
            var deserializer = new MessageDeserializingVisitor()
            {
                DataBuffer = serializedData,
                DataLength = serializedData.Length,
                BufferOffset = 0
            };
            var reconstructedMessage = new Request();
            reconstructedMessage.Accept(deserializer);

            Assert.AreEqual(original.Id, reconstructedMessage.Id);
            Assert.AreEqual(original.Data, reconstructedMessage.Data);
        }
        public void Deserialize(Request msg)
        {
            if (this.DataBuffer == null || this.DataBuffer.Length == 0)
            {
                throw new InvalidOperationException("DataBuffer is not set or empty");
            }

            if (this.DataBuffer.Length < this.BufferOffset + this.DataLength)
            {
                throw new InvalidOperationException("DataBuffer is too short for specified offset and data length");
            }

            try
            {
                var guidBytes = new byte[16];
                Buffer.BlockCopy(this.DataBuffer, this.BufferOffset, guidBytes, 0, 16);
                msg.Id = new Guid(guidBytes);

                var dataLen = BitConverter.ToInt32(this.DataBuffer, this.BufferOffset + 16);
                if (dataLen > 0)
                {
                    msg.Data = new byte[dataLen];
                    Buffer.BlockCopy(this.DataBuffer, this.BufferOffset + 20, msg.Data, 0, dataLen);
                }
                else
                {
                    msg.Data = null;
                }
            }
            catch (Exception ex)
            {
                throw new SerializationException("Exception during deserializing Response", ex);
            }
        }