/// <summary> /// Fills binary data to the queue /// </summary> public PushResult FillData(IEnumerable <byte[]> items, bool createAsSaved, bool highPriority) { if (_queue.Status == QueueStatus.Stopped) { return(PushResult.StatusNotSupported); } int max = _queue.HighPriorityLinkedList.Count + _queue.RegularLinkedList.Count + items.Count(); if (_queue.Options.MessageLimit > 0 && max > _queue.Options.MessageLimit) { return(PushResult.LimitExceeded); } foreach (byte[] item in items) { TmqMessage message = new TmqMessage(MessageType.Channel, _queue.Channel.Name); message.FirstAcquirer = true; message.HighPriority = highPriority; message.AcknowledgeRequired = _queue.Options.RequestAcknowledge; message.ContentType = _queue.Id; if (_queue.Options.UseMessageId) { message.SetMessageId(_queue.Channel.Server.MessageIdGenerator.Create()); } message.Content = new MemoryStream(item); message.Content.Position = 0; message.CalculateLengths(); QueueMessage qm = new QueueMessage(message, createAsSaved); if (highPriority) { lock (_queue.HighPriorityLinkedList) _queue.HighPriorityLinkedList.AddLast(qm); } else { lock (_queue.RegularLinkedList) _queue.RegularLinkedList.AddLast(qm); } } _queue.Info.UpdateHighPriorityMessageCount(_queue.HighPriorityLinkedList.Count); _queue.Info.UpdateRegularMessageCount(_queue.RegularLinkedList.Count); return(PushResult.Success); }
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); }
/// <summary> /// Finishes the message preparation and returns /// </summary> public TmqMessage Get() { _message.Content = new MemoryStream(Encoding.UTF8.GetBytes(_content.ToString())); _message.CalculateLengths(); return(_message); }