public void Send_one_messages() { var slice1 = new BufferSlice(new byte[65535], 0, 65535); var encoder1 = new MicroMessageEncoder(new DataContractMessageSerializer()); var decoder1 = new MicroMessageDecoder(new DataContractMessageSerializer()); var slice2 = new BufferSlice(new byte[65535], 0, 65535); var encoder2 = new MicroMessageEncoder(new DataContractMessageSerializer()); var decoder2 = new MicroMessageDecoder(new DataContractMessageSerializer()); var evt = new ManualResetEvent(false); string actual = null; var sut2 = new TcpChannel(slice2, encoder2, decoder2); sut2.MessageReceived += (channel, message) => { actual = message.ToString(); evt.Set(); }; sut2.Assign(_helper.Server); var sut1 = new TcpChannel(slice1, encoder1, decoder1); sut1.MessageReceived += (channel, message) => { }; sut1.Assign(_helper.Client); sut1.Send("Hello".PadRight(1000)); evt.WaitOne(500).Should().BeTrue(); actual.Should().StartWith("Hello"); }
public void send_message() { var slice = new BufferSlice(new byte[65535], 0, 65535); var encoder = new FakeEncoder(); var decoder = new FakeDecoder(); object expected = null; var sut = new TcpChannel(slice, encoder, decoder); sut.MessageReceived += (channel, message) => expected = message; sut.Assign(_helper.Client); sut.Send("Hello world"); }
public void Send_500_messages() { var slice1 = new BufferSlice(new byte[65535], 0, 65535); var encoder1 = new MicroMessageEncoder(new DataContractMessageSerializer()); var decoder1 = new MicroMessageDecoder(new DataContractMessageSerializer()); var slice2 = new BufferSlice(new byte[65535], 0, 65535); var encoder2 = new MicroMessageEncoder(new DataContractMessageSerializer()); var decoder2 = new MicroMessageDecoder(new DataContractMessageSerializer()); var evt = new ManualResetEvent(false); var messages = new List <object>(); var sut1 = new TcpChannel(slice1, encoder1, decoder1); sut1.MessageReceived += (channel, message) => { }; sut1.Assign(_helper.Client); var sut2 = new TcpChannel(slice2, encoder2, decoder2); sut2.MessageReceived += (channel, message) => { messages.Add(message); if (messages.Count == 500) { evt.Set(); } }; sut2.Assign(_helper.Server); for (int i = 0; i < 500; i++) { sut1.Send("Hello" + i + "".PadRight(1000)); } sut1.Send("Hello world"); evt.WaitOne(500).Should().BeTrue(); for (int i = 0; i < 500; i++) { messages[i].ToString().Should().StartWith("Hello" + i); } }
public Task SendAsync(object message) { if (message == null) { throw new ArgumentNullException("message"); } if (_sendCompletionSource != null) { throw new InvalidOperationException("There is already a pending send operation."); } _sendCompletionSource = new TaskCompletionSource <object>(); _sendCompletionSource.Task.ConfigureAwait(false); _channel.Send(message); return(_sendCompletionSource.Task); }
/// <summary> /// Send message to the remote end point. /// </summary> /// <param name="message">message to send.</param> /// <returns></returns> /// <exception cref="System.ArgumentNullException">message</exception> /// <remarks> /// <para> /// All messages are being enqueued and sent in order. This method will return when the current message have been sent. It /// </para> /// <para> /// The method is thread safe and can be executed from multiple threads. /// </para> /// </remarks> public async Task SendAsync(object message) { if (message == null) { throw new ArgumentNullException("message"); } await _sendQueueSemaphore.WaitAsync(); _channel.Send(message); await _sendCompletedSemaphore.WaitAsync(); _sendQueueSemaphore.Release(); }
/// <summary> /// SendAsync(). It is used internally to send command to FreeSwitch /// </summary> /// <param name="message">the command to send</param> /// <returns>Async task</returns> protected async Task SendAsync(object message) { if (message == null) { throw new ArgumentNullException(nameof(message)); } if (_sendException != null) { var ex = _sendException; _sendException = null; throw new AggregateException(ex); } await _sendQueueSemaphore.WaitAsync(); _channel.Send(message); await _sendCompletedSemaphore.WaitAsync(); _sendQueueSemaphore.Release(); }