Пример #1
0
        /// <summary>
        /// Writes a message to a stream
        /// </summary>
        public async Task Write(Stream stream, HorseMessage message)
        {
            WriteType(stream, DataType.Insert);
            await WriteId(stream, message.MessageId);

            message.Content.Position = 0;

            await using MemoryStream ms = new MemoryStream();
            HmqWriter.Write(message, ms);
            ms.Position = 0;

            await WriteContent(Convert.ToInt32(ms.Length), ms, stream);
        }
Пример #2
0
        public async Task DisconnectDueToPingTimeout()
        {
            TestHorseMq server = new TestHorseMq();
            await server.Initialize();

            int port = server.Start();

            TcpClient client = new TcpClient();
            await client.ConnectAsync("127.0.0.1", port);

            NetworkStream stream = client.GetStream();

            stream.Write(PredefinedMessages.PROTOCOL_BYTES_V2);
            HorseMessage msg = new HorseMessage();

            msg.Type        = MessageType.Server;
            msg.ContentType = KnownContentTypes.Hello;
            msg.SetStringContent("GET /\r\nName: Test-" + port);
            msg.CalculateLengths();
            HmqWriter.Write(msg, stream);
            await Task.Delay(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);

            await Task.Delay(15000);

            Assert.False(client.Connected);
            Assert.Equal(1, server.ClientDisconnected);
        }