private int FailedToSend(LightningTransaction tx, OutgoingMessage message)
        {
            var db    = OpenDatabase(tx, OutgoingQueue);
            var value = tx.Get(db, message.Id.MessageIdentifier.ToByteArray());

            if (value.resultCode == MDBResultCode.NotFound)
            {
                return(int.MaxValue);
            }
            var msg      = value.value.CopyToNewArray().ToOutgoingMessage();
            int attempts = message.SentAttempts;

            if (attempts >= message.MaxAttempts)
            {
                RemoveMessageFromStorage(tx, OutgoingQueue, msg);
            }
            else if (msg.DeliverBy.HasValue)
            {
                var expire = msg.DeliverBy.Value;
                if (expire != DateTime.MinValue && DateTime.Now >= expire)
                {
                    RemoveMessageFromStorage(tx, OutgoingQueue, msg);
                }
            }
            else
            {
                tx.Put(db, message.Id.MessageIdentifier.ToByteArray(), message.Serialize());
            }
            return(attempts);
        }
        private void StoreOutgoing(LightningTransaction tx, OutgoingMessage message)
        {
            var db = OpenDatabase(tx, OutgoingQueue);

            tx.Put(db, message.Id.MessageIdentifier.ToByteArray(), message.Serialize());
        }