Пример #1
0
        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);
        }
Пример #2
0
        private TmqMessage CreateMessage()
        {
            TmqMessage msg = new TmqMessage(MessageType.Channel, "channel");

            msg.SetMessageId(_generator.Create());
            msg.SetStringContent("Hello, World!");
            return(msg);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }