void FreeUpSlot(Guid messageId, EndpointAddress address, PersistenceUseType useType)
        {
            if (useType != cache.UseType || address != cache.Address) return;

            MessagePayload message;
            sentMessages.TryRemove(messageId, out message);

            SendMessages();
        }
        public static void SetPersistenceId(
            this MessagePayload payload, 
            EndpointAddress address, 
            PersistenceUseType useType)
        {
            Contract.Requires(address != null);
            Contract.Requires(address != EndpointAddress.Empty);

            payload.RemoveHeader(typeof(PersistenceHeader));
            payload.AddHeader(new PersistenceHeader(new MessagePersistenceId(payload.Id, address, useType)));
        }
        public TestMessageChangeRebuilder(
            ChangeStore changeStore, 
            EndpointAddress address, 
            PersistenceUseType useType, 
            ICheckpointStrategy checkPointStrategy)
            : base(changeStore, checkPointStrategy)
        {
            Address = address;
            UseType = useType;
            Id = address + "|" + useType;

            this.messages = new List<MessagePayload>();
        }
        public ReceiveMessageCache(
            ChangeStore changeStore,
            EndpointAddress address, 
            PersistenceUseType useType,
            ICheckpointStrategy checkPointStrategy)
            : base(changeStore, checkPointStrategy)
        {
            Contract.Requires(changeStore != null);
            Contract.Requires(address != EndpointAddress.Empty);
            
            Address = address;
            UseType = useType;
            Id = address + "|" + useType;

            messages = new ConcurrentDictionary<Guid, MessagePayload>();
            sequence = 1;
        }
 public SendMessageCache BuildNonDurableSendCache(PersistenceUseType useType, EndpointAddress address)
 {
     var cache = CreateSendMessageCache(useType, address, nullChangeStore);
     cache.Initialise();
     return cache;
 }
 SendMessageCache CreateSendMessageCache(PersistenceUseType useType, EndpointAddress address, ChangeStore changeStore)
 {
     return new SendMessageCache(systemTime, changeStore, address, useType, checkPointStrategy);
 }
 public SendMessageCache BuildSendCache(PersistenceUseType useType, EndpointAddress address, IDurableOptionSchema durableOptions)
 {
     var cache = CreateSendMessageCache(useType, address, SelectChangeStore(durableOptions));
     cache.Initialise();
     return cache;
 }
 ReceiveMessageCache CreateReceiveMessageCache(PersistenceUseType useType, EndpointAddress address, IDurableOptionSchema durableOptions)
 {
     return new ReceiveMessageCache(SelectChangeStore(durableOptions), address, useType, checkPointStrategy);
 }
 public ReceiveMessageCache BuildReceiveCache(PersistenceUseType useType, EndpointAddress address, IDurableOptionSchema durableOptions)
 {
     var cache = CreateReceiveMessageCache(useType, address, durableOptions);
     cache.Initialise();
     return cache;
 }