public void Register(Message message)
        {
            timeoutMessageIds.Write(writer =>
            {
                var timeToSend = XmlConvert.ToDateTime(message.Headers["time-to-send"], XmlDateTimeSerializationMode.Unspecified);

                logger.DebugFormat("Registering message {0} to be sent at {1} on {2}",
                                   message.Id, timeToSend, queue.QueueName);

                writer.Add(timeToSend, message.Id);
            });
        }
 public Message ToMessage()
 {
     var message = new Message
                       {
                           Data = Payload,
                           Id = MessageId,
                           SentAt = CreatedAt,
                           SubQueue = SubQueueName,
                           ProcessedCount = ProcessedCount
                       };
     message.Headers = extractHeaders(Headers);
     return message;
 }
        public void MoveTo(string subQueue, Message message)
        {
            using (var command = SqlTransactionContext.Current.Connection.CreateCommand())
            {
                command.Transaction = SqlTransactionContext.Current.Transaction;
                command.CommandText = "Queue.MoveMessage";
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.AddWithValue("@Endpoint", _endpoint.ToString());
                command.Parameters.AddWithValue("@Queue", _queueName);
                command.Parameters.AddWithValue("@Subqueue", (object)subQueue ?? DBNull.Value);
                command.Parameters.AddWithValue("@MessageId", message.Id);

                command.ExecuteNonQuery();
            }
        }
		public static void WriteMessageId(this OrderedList<DateTime, IList<long>>.Writer writer, DateTime timeToSend, Message message)
		{
			List<IList<long>> list;
			if (writer.TryGetValue(timeToSend, out list) && list.Count > 0)
			{
				list[0].Add(message.Id);
			}
			else
			{
				writer.Add(timeToSend, new List<long> { message.Id });
			}
		}
        public void MarkMessageAsReady(Message message)
        {
            using (var command = SqlTransactionContext.Current.Connection.CreateCommand())
            {
                command.CommandText = "Queue.MarkMessageAsReady";
                command.CommandType = CommandType.StoredProcedure;
                command.Transaction = SqlTransactionContext.Current.Transaction;
                command.Parameters.AddWithValue("@MessageId", message.Id);

                command.ExecuteNonQuery();
            }
        }