Exemple #1
0
        public void PoolMemoryStreamWriteCopyToAsync()
        {
            //assume
            const int count = 20000;
            var       bytes = new byte[count];

            for (int i = 0; i < count; i++)
            {
                bytes[i] = (byte)((i - byte.MinValue) % byte.MaxValue);
            }

            //act
            var stream = new PoolMemoryStream();

            stream.Write(bytes, 0, count);
            stream.Position = 0;

            var target = new MemoryStream();

            stream.CopyToAsync(target).Wait();

            var readBytes = target.ToArray();

            //assert
            Assert.AreEqual(stream.Length, readBytes.Length, "not all written bytes are copied");
            Assert.IsTrue(readBytes.SequenceEqual(bytes), "returned bytes differ from written bytes");
        }
Exemple #2
0
        public void PoolMemoryStreamReadWriteBytes()
        {
            //assume
            const int count = 20000;
            var       bytes = new byte[count];

            for (int i = 0; i < count; i++)
            {
                bytes[i] = (byte)((i - byte.MinValue) % byte.MaxValue);
            }

            //act
            var stream = new PoolMemoryStream();

            stream.Write(bytes, 0, count);
            stream.Position = 0;

            var readBytes = new byte[count];
            int actual    = 0;
            int read      = 0;

            do
            {
                read    = stream.Read(readBytes, read, count - read);
                actual += read;
            } while (read > 0);

            //assert
            Assert.AreEqual(stream.Length, actual, "not all written bytes can be read");
            Assert.IsTrue(readBytes.SequenceEqual(bytes), "returned bytes differ from written bytes");


            stream.Dispose();
        }
Exemple #3
0
        public void PoolMemoryStreamReadWriteSingleBytes()
        {
            //assume
            const int count = 20000;
            var       bytes = new byte[count];

            for (int i = 0; i < count; i++)
            {
                bytes[i] = (byte)((i - byte.MinValue) % byte.MaxValue);
            }

            //act
            var stream = new PoolMemoryStream();

            for (int i = 0; i < count; i++)
            {
                stream.WriteByte(bytes[i]);
            }

            stream.Position = 0;

            Assert.AreEqual(stream.Length, count, "Unexpected stream length!");
            for (int i = 0; i < count; i++)
            {
                Assert.AreEqual((byte)stream.ReadByte(), bytes[i], "Read byte is not equal to written bytes!");
            }
        }
Exemple #4
0
        /// <summary>
        /// Gets the frame bytes.
        /// </summary>
        /// <returns></returns>
        public Stream GetFrameBytes(bool compress, int compressTreshold)
        {
            var buffer = new PoolMemoryStream();

            buffer.WriteByte((byte)Version);
            buffer.WriteByte((byte)Flags);
            buffer.WriteByte(unchecked ((byte)Stream));
            buffer.WriteByte((byte)OpCode);

            //write length placeholder
            buffer.WriteInt(0);

            //write uncompressed data
            WriteData(buffer);

            //compress if allowed, and buffer is large enough to compress
            if (compress && buffer.Length > compressTreshold + 8)
            {
                buffer.Position = 8;

                //compress data to temporary stream
                using (var compressed = new PoolMemoryStream())
                {
                    //compress the data to the buffer
                    int length = Compressor.Compress(buffer, compressed);

                    //add compression to flags
                    Flags          |= FrameFlags.Compression;
                    buffer.Position = 1;
                    buffer.WriteByte((byte)Flags);

                    //overwrite data with compressed data
                    buffer.Position     = 8;
                    compressed.Position = 0;
                    compressed.CopyTo(buffer);
                    buffer.SetLength(length + 8);
                }
            }

            //overwrite length with real value
            buffer.Position = 4;
            buffer.WriteInt((int)buffer.Length - 8);

            //reset buffer position
            buffer.Position = 0;

            //return the buffer
            return(buffer);
        }
Exemple #5
0
        public static void EncodeRequest(Request request, Stream outputStream)
        {
            var header = new byte[HeaderLength];

            header.WriteUShort(Magic);
            header[2] = RequestFlag | HessianSerialize;
            if (request.IsEvent)
            {
                header[2] |= EventFlag;
            }

            if (request.IsTwoWay)
            {
                header[2] |= TwowayFlag;
            }

            header.WriteLong(request.RequestId, 4);
            using (var dataStream = new PoolMemoryStream())
            {
                var output = new Hessian2Writer(dataStream);
                if (request.IsEvent)
                {
                    output.WriteNull();
                }
                else
                {
                    output.WriteString("2.0.0");
                    output.WriteObject(request.Service);
                    output.WriteObject(request.Version);
                    output.WriteObject(request.MethodName);
                    output.WriteString(request.ParameterTypeInfo);
                    if (request.Arguments != null && request.Arguments.Length > 0)
                    {
                        foreach (var arg in request.Arguments)
                        {
                            output.WriteObject(arg);
                        }
                    }
                    output.WriteObject(request.Attachments);
                }
                header.WriteInt((int)dataStream.Length, 12);
                outputStream.Write(header, 0, header.Length);
                dataStream.CopyTo(outputStream);
            }
        }
Exemple #6
0
        public void PoolMemoryStreamWriteBytes()
        {
            //assume
            const int count = 20000;
            var       bytes = new byte[count];

            for (int i = 0; i < count; i++)
            {
                bytes[i] = (byte)((i - byte.MinValue) % byte.MaxValue);
            }

            //act
            var stream = new PoolMemoryStream();

            stream.Write(bytes, 0, count);

            //assert
            Assert.AreEqual(stream.Length, count, "Unexpected stream length");
            Assert.AreEqual(stream.Position, count, "Unexpected position");
            Assert.IsTrue(stream.Capacity >= count, "Unexpected capacity");
        }