Exemplo n.º 1
0
        public void SendAndReceiveData([Values(10, 100)] int length)
        {
            this.writer.BeginWriting();
            Span <byte> writeSpan = this.writer.Reserve(length);

            Assert.That(writeSpan.Length, Is.EqualTo(length));
            for (int i = 0; i < length; i++)
            {
                writeSpan[i] = (byte)i;
            }

            NetworkWriteResult writeResult = this.writer.EndWriting(this.remoteIpEndPoint);

            Assert.That(writeResult.SocketError, Is.EqualTo(SocketError.Success));

            NetworkReadResult readResult = this.reader.BeginReading();

            Assert.That(readResult.SocketError, Is.EqualTo(SocketError.Success));
            Assert.That(readResult.IsDisconnected, Is.EqualTo(false));
            Assert.That(readResult.RemoteIpEndPoint.Address, Is.EqualTo(this.remoteIpEndPoint.Address));
            Assert.That(readResult.RemoteIpEndPoint.Port, Is.Not.EqualTo(this.remoteIpEndPoint.Port));

            ReadOnlySpan <byte> readSpan = this.reader.Read(length);

            this.reader.EndReading();
            Assert.That(readSpan.Length, Is.EqualTo(length));

            AssertEquals(readSpan, writeSpan);
        }
Exemplo n.º 2
0
        public void SendCompleteAndReceiveFragmentedData([Values(2, 10, 100)] int length)
        {
            this.writer.BeginWriting();
            Span <byte> writeSpan = this.writer.Reserve(100);

            Assert.That(writeSpan.Length, Is.EqualTo(100));
            for (int i = 0; i < length; i++)
            {
                writeSpan[i] = (byte)i;
            }

            NetworkWriteResult writeResult = this.writer.EndWriting(this.remoteIpEndPoint);

            Assert.That(writeResult.SocketError, Is.EqualTo(SocketError.Success));

            NetworkReadResult readResult = this.reader.BeginReading();

            Assert.That(readResult.SocketError, Is.EqualTo(SocketError.Success));

            byte[] buffer = new byte[100];
            int    index  = 0;

            for (int i = 0; i < (100 / length); i++)
            {
                this.reader.Read(length).CopyTo(buffer.AsSpan(index, length));
                index += length;
            }

            this.reader.EndReading();
            AssertEquals(buffer.AsSpan(), writeSpan);
        }
Exemplo n.º 3
0
        public void ReadAndWriteMultipleFragmentsThreaded(int maxReadLength, int maxReserveLength)
        {
            this.reader = new TcpReader(this.readerTcpClient.Client, maxReadLength);
            this.writer = new TcpWriter(this.writerTcpClient.Client, maxReserveLength);

            this.writerTcpClient.Client.SendBufferSize = 1;

            var xdrReader = new XdrReader(this.reader);
            var xdrWriter = new XdrWriter(this.writer);

            byte[] value = TestXdr.GenerateByteTestData(17);

            var task = Task.Run(
                () =>
            {
                NetworkReadResult readResult = this.reader.BeginReading();
                Assert.That(readResult.SocketError, Is.EqualTo(SocketError.Success));
                Assert.That(xdrReader.ReadOpaque(), Is.EqualTo(value));
                Assert.That(xdrReader.ReadInt(), Is.EqualTo(42));
                this.reader.EndReading();
            });

            this.writer.BeginWriting();
            xdrWriter.WriteVariableLengthOpaque(value);
            xdrWriter.Write(42);
            this.writer.EndWriting(null);

            task.Wait();
        }