/// <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); }
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); }