コード例 #1
0
ファイル: Sender.cs プロジェクト: ebadier/TheNetTunnel
        /// <summary>
        ///
        /// </summary>
        ///<exception cref="ConnectionIsLostException"></exception>
        ///<exception cref="ArgumentException">Occurs when messageId is wrong</exception>
        ///<exception cref="LocalSerializationException">argument type serializer is not implemented, or not the same as specified during the construction</exception>
        public void Ans(short messageId, short askId, object value)
        {
            if (messageId >= 0)
            {
                throw new ArgumentException("Ans-messageId have to be < 0");
            }

            ISerializer serializer;

            _outputSayMessageSerializes.TryGetValue(messageId, out serializer);
            if (serializer == null)
            {
                throw new ArgumentException($"Ans-messageId {messageId} is unknown");
            }

            var stream = _channel.CreateStreamForSend();

            Tools.WriteShort(messageId, to: stream);
            Tools.WriteShort(askId, to: stream);
            try
            {
                serializer.Serialize(value, stream);
            }
            catch (Exception e)
            {
                throw new LocalSerializationException(messageId, askId, "Serialization failed because of: " + e.Message, e);
            }
            stream.Position = 0;
            _channel.Write(stream);
        }
コード例 #2
0
        // [TestCase(1000000, 100, 12349)]
        public void SendsAndReceivesViaTcpConnection(int length, int ConcurrentLevel, int port)
        {
            TcpClient client;
            TcpClient serverClient;

            IntegrationTestsHelper.CreateTwoConnectedTcpClients(port, out client, out serverClient);

            var sendChannel    = new TcpChannel(client);
            var receiveChannel = new TcpChannel(serverClient);

            sendChannel.AllowReceive    = true;
            receiveChannel.AllowReceive = true;

            var sendtransporter   = new Transporter(sendChannel);
            var receiveTransporwe = new Transporter(receiveChannel);

            int       doneThreads        = 0;
            Exception inThreadsException = null;

            receiveTransporwe.OnReceive += (_, arg) =>
            {
                var buffer = new byte[length];
                arg.Position = 0;
                arg.Read(buffer, 0, length);
                byte lastValue = buffer.Last();
                for (int i = 0; i < length; i++)
                {
                    try
                    {
                        Assert.AreEqual(lastValue, buffer[i], "Value is not as expected sience index " + i);
                    }
                    catch (Exception e)
                    {
                        inThreadsException = e;
                    }
                }
                doneThreads++;
            };

            IntegrationTestsHelper.RunInParrallel <MemoryStream>(ConcurrentLevel,
                                                                 i =>
            {
                byte[] array = IntegrationTestsHelper.CreateArray(length, (byte)i);
                var stream   = sendtransporter.CreateStreamForSend();
                stream.Write(array, 0, array.Length);
                return(stream);
            },
                                                                 (i, stream) =>
            {
                sendtransporter.Write(stream);
            });

            IntegrationTestsHelper.WaitOrThrow(() => doneThreads != ConcurrentLevel - 1, () => inThreadsException);
            client.Dispose();
            serverClient.Dispose();
        }
コード例 #3
0
        // [TestCase(1000000, 100)]
        public void SendsAndReceivesViaMockConnection(int length, int ConcurrentLevel)
        {
            var pair = TNT.Testing.TntTestHelper.CreateChannelPair();

            pair.ConnectAndStartReceiving();

            var       sendtransporter    = new Transporter(pair.CahnnelA);
            var       receiveTransporwe  = new Transporter(pair.ChannelB);
            int       doneThreads        = 0;
            Exception inThreadsException = null;

            receiveTransporwe.OnReceive += (_, arg) =>
            {
                var buffer = new byte[length];
                arg.Position = 0;
                arg.Read(buffer, 0, length);
                byte lastValue = buffer.Last();
                for (int i = 0; i < length; i++)
                {
                    try
                    {
                        Assert.AreEqual(lastValue, buffer[i], "Value is not as expected sience index " + i);
                    }
                    catch (Exception e)
                    {
                        inThreadsException = e;
                    }
                }
                doneThreads++;
            };

            IntegrationTestsHelper.RunInParrallel <MemoryStream>(ConcurrentLevel,
                                                                 initializeAction: i =>
            {
                byte[] array = IntegrationTestsHelper.CreateArray(length, (byte)i);
                var stream   = sendtransporter.CreateStreamForSend();
                stream.Write(array, 0, array.Length);
                return(stream);
            },
                                                                 action: (i, stream) =>
            {
                sendtransporter.Write(stream);
            });

            IntegrationTestsHelper.WaitOrThrow(() => doneThreads != ConcurrentLevel - 1, () => inThreadsException);
            pair.Disconnect();
        }