/// <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); }
// [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(); }
// [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(); }