public async Task WithAcknowledge() { TestMqServer server = new TestMqServer(); server.Initialize(42602); server.Start(); TmqClient client1 = new TmqClient(); TmqClient client2 = new TmqClient(); client1.ClientId = "client-1"; client2.ClientId = "client-2"; client2.AutoAcknowledge = true; await client1.ConnectAsync("tmq://localhost:42602"); await client2.ConnectAsync("tmq://localhost:42602"); Assert.True(client1.IsConnected); Assert.True(client2.IsConnected); bool received = false; client2.MessageReceived += (c, m) => received = m.Source == "client-1"; TmqMessage message = new TmqMessage(MessageType.Client, "client-2"); message.SetStringContent("Hello, World!"); bool sent = await client1.SendWithAcknowledge(message); Assert.True(sent); Assert.True(received); }
private TmqMessage CreateMessage() { TmqMessage msg = new TmqMessage(MessageType.Channel, "channel"); msg.SetMessageId(_generator.Create()); msg.SetStringContent("Hello, World!"); return(msg); }
public void DisconnectDueToPingTimeout() { TestMqServer server = new TestMqServer(); server.Initialize(42105); server.Start(); TcpClient client = new TcpClient(); client.Connect("127.0.0.1", 42105); NetworkStream stream = client.GetStream(); stream.Write(PredefinedMessages.PROTOCOL_BYTES); TmqMessage msg = new TmqMessage(); msg.Type = MessageType.Server; msg.ContentType = KnownContentTypes.Hello; msg.SetStringContent("GET /\r\nName: Test-42105"); msg.CalculateLengths(); TmqWriter writer = new TmqWriter(); writer.Write(msg, stream).Wait(); Thread.Sleep(1000); Assert.Equal(1, server.ClientConnected); ThreadPool.UnsafeQueueUserWorkItem(async s => { byte[] buffer = new byte[128]; while (client.Connected) { int r = await s.ReadAsync(buffer); if (r == 0) { client.Dispose(); break; } } }, stream, false); Thread.Sleep(25000); Assert.False(client.Connected); Assert.Equal(1, server.ClientDisconnected); }
public async Task FromClientToClientManuel() { TestMqServer server = new TestMqServer(); server.Initialize(42302); server.Start(); server.Server.Server.Options.PingInterval = 300; server.Server.Server.Options.RequestTimeout = 300; await Task.Delay(250); TmqClient client1 = new TmqClient(); TmqClient client2 = new TmqClient(); client1.ClientId = "client-1"; client2.ClientId = "client-2"; client2.AutoAcknowledge = false; client2.MessageReceived += async(c, m) => { if (m.AcknowledgeRequired) { await client2.SendAsync(m.CreateAcknowledge()); } }; await client1.ConnectAsync("tmq://localhost:42302"); await client2.ConnectAsync("tmq://localhost:42302"); Assert.True(client1.IsConnected); Assert.True(client2.IsConnected); TmqMessage message = new TmqMessage(); message.HighPriority = true; message.Type = MessageType.Client; message.SetTarget(client2.ClientId); message.SetStringContent("Hello, World!"); bool acknowledge = await client1.SendWithAcknowledge(message); Assert.True(acknowledge); }
public async Task CatchResponseMessages(bool enabled) { int port = enabled ? 42711 : 42712; TestMqServer server = new TestMqServer(); server.Initialize(port); server.Start(); TmqClient client1 = new TmqClient(); TmqClient client2 = new TmqClient(); client1.ClientId = "client-1"; client2.ClientId = "client-2"; client1.CatchResponseMessages = enabled; await client1.ConnectAsync("tmq://localhost:" + port); await client2.ConnectAsync("tmq://localhost:" + port); Assert.True(client1.IsConnected); Assert.True(client2.IsConnected); bool responseCaught = false; client1.MessageReceived += (c, m) => responseCaught = true; client2.MessageReceived += async(c, m) => { TmqMessage rmsg = m.CreateResponse(); rmsg.SetStringContent("Response!"); await((TmqClient)c).SendAsync(rmsg); }; TmqMessage msg = new TmqMessage(MessageType.Client, "client-2"); msg.ResponseRequired = true; msg.SetStringContent("Hello, World!"); TmqMessage response = await client1.Request(msg); Assert.NotNull(response); Assert.Equal(msg.MessageId, response.MessageId); Assert.Equal(enabled, responseCaught); }
public async Task WithResponse() { TestMqServer server = new TestMqServer(); server.Initialize(42603); server.Start(); TmqClient client1 = new TmqClient(); TmqClient client2 = new TmqClient(); client1.ClientId = "client-1"; client2.ClientId = "client-2"; client2.AutoAcknowledge = true; await client1.ConnectAsync("tmq://localhost:42603"); await client2.ConnectAsync("tmq://localhost:42603"); Assert.True(client1.IsConnected); Assert.True(client2.IsConnected); client2.MessageReceived += async(c, m) => { if (m.Source == "client-1") { TmqMessage rmsg = m.CreateResponse(); rmsg.ContentType = 123; rmsg.SetStringContent("Hello, World Response!"); await((TmqClient)c).SendAsync(rmsg); } }; TmqMessage message = new TmqMessage(MessageType.Client, "client-2"); message.SetStringContent("Hello, World!"); TmqMessage response = await client1.Request(message); Assert.NotNull(response); Assert.Equal(123, response.ContentType); }
public async Task FromClientToClientTimeout() { TestMqServer server = new TestMqServer(); server.Initialize(42393); server.Start(15, 15); server.Server.Server.Options.PingInterval = 300; server.Server.Server.Options.RequestTimeout = 300; await Task.Delay(250); TmqClient client1 = new TmqClient(); TmqClient client2 = new TmqClient(); client1.ClientId = "client-1"; client2.ClientId = "client-2"; client1.AcknowledgeTimeout = TimeSpan.FromSeconds(5); client2.AutoAcknowledge = false; await client1.ConnectAsync("tmq://localhost:42393"); await client2.ConnectAsync("tmq://localhost:42393"); Assert.True(client1.IsConnected); Assert.True(client2.IsConnected); TmqMessage message = new TmqMessage(); message.HighPriority = true; message.Type = MessageType.Client; message.SetTarget(client2.ClientId); message.SetStringContent("Hello, World!"); bool acknowledge = await client1.SendWithAcknowledge(message); Assert.False(acknowledge); }