Important! Handle the ChannelFailed delegate to know why the channel failed.
/// <summary> /// Create a new channel /// </summary> /// <param name="readBuffer">Buffer which should be used when reading from the socket</param> /// <param name="encoder">Used to encode outgoing data</param> /// <param name="decoder">Used to decode incoming data</param> /// <returns>Created channel</returns> public ITcpChannel Create(IBufferSlice readBuffer, IMessageEncoder encoder, IMessageDecoder decoder) { var channel = new TcpChannel(readBuffer, encoder, decoder); if (OutboundMessageQueueFactory != null) channel.OutboundMessageQueue = OutboundMessageQueueFactory(); return channel; }
public void assign_without_subscribing_on_MessageReceived_means_that_messages_can_get_lost() { var slice = new BufferSlice(new byte[65535], 0, 65535); var encoder = Substitute.For<IMessageEncoder>(); var decoder = Substitute.For<IMessageDecoder>(); var sut = new TcpChannel(slice, encoder, decoder); Action actual = () => sut.Assign(_helper.Client); actual.ShouldThrow<InvalidOperationException>(); }
public MicroMessageClient(IMessageSerializer serializer) { _decoder = new MicroMessageDecoder(serializer); _encoder = new MicroMessageEncoder(serializer); _channel = new TcpChannel(new BufferSlice(new byte[65535], 0, 65535), _encoder, _decoder); _channel.Disconnected = OnDisconnect; _channel.MessageSent = OnSendCompleted; _channel.MessageReceived = OnChannelMessageReceived; _decoder.MessageReceived = OnMessageReceived; _args.Completed += OnConnect; }
public void Assign_should_work_after_subscription() { var slice = new BufferSlice(new byte[65535], 0, 65535); var encoder = Substitute.For<IMessageEncoder>(); var decoder = Substitute.For<IMessageDecoder>(); object expected; var sut = new TcpChannel(slice, encoder, decoder); sut.MessageReceived += (channel, message) => expected = message; sut.Assign(_helper.Client); }
public void should_listen_on_the_decoder_event() { var slice = new BufferSlice(new byte[65535], 0, 65535); var encoder = Substitute.For<IMessageEncoder>(); var decoder = new FakeDecoder(); object expected = null; var sut = new TcpChannel(slice, encoder, decoder); sut.MessageReceived += (channel, message) => expected = message; decoder.MessageReceived("Hello"); expected.Should().Be("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"); }
/// <summary> /// Create a new channel /// </summary> /// <param name="readBuffer">Buffer which should be used when reading from the socket</param> /// <param name="encoder">Used to encode outgoing data</param> /// <param name="decoder">Used to decode incoming data</param> /// <returns>Created channel</returns> public ITcpChannel Create(IBufferSlice readBuffer, IMessageEncoder encoder, IMessageDecoder decoder) { var channel = new TcpChannel(readBuffer, encoder, decoder); return channel; }
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_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); } }
/// <summary> /// Create a new channel /// </summary> /// <param name="readBuffer">Buffer which should be used when reading from the socket</param> /// <param name="encoder">Used to encode outgoing data</param> /// <param name="decoder">Used to decode incoming data</param> /// <returns>Created channel</returns> public ITcpChannel Create(IBufferSlice readBuffer, IMessageEncoder encoder, IMessageDecoder decoder) { var channel = new TcpChannel(readBuffer, encoder, decoder); return(channel); }