Example #1
0
        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");
        }
Example #2
0
        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");
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
        }
Example #5
0
        /// <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();
        }