public void Detach(byte[] sourceStreamId, byte[] streamIdToDetach, long detachedSince)
        {
            ActivityStream stream;

            if (activityFeedStore.TryGetValue(sourceStreamId, out stream))
            {
                var detaching = stream.AttachedStreams.Where(x => ByteArrayHelper.Compare(x.StreamId, streamIdToDetach)).Single();
                detaching.ExpiresAt = detachedSince;
            }
        }
 public virtual bool Equals(Activity other)
 {
     if (ReferenceEquals(null, other))
     {
         return(false);
     }
     if (ReferenceEquals(this, other))
     {
         return(true);
     }
     return(ByteArrayHelper.Compare(ActivityId, other.ActivityId));
 }
        public void Detach(byte[] streamId, byte[] streamIdToDetach, DateTime detachedSince)
        {
            if (ByteArrayHelper.Compare(streamId, streamIdToDetach))
            {
                throw new ArgumentException("Detaching a stream from itself is now allowed.");
            }

            var stream = repository.Load(streamId);
            var result = stream.Detach(streamIdToDetach, detachedSince);

            if (result.IsSuccessful)
            {
                repository.DetachStream(streamId, streamIdToDetach, detachedSince.ToFileTimeUtc());
            }
        }
        public void Attach(byte[] streamId, byte[] streamIdToAttach, DateTime expiresAt)
        {
            if (ByteArrayHelper.Compare(streamId, streamIdToAttach))
            {
                throw new ArgumentException("Attaching a stream to itself is now allowed.");
            }

            var stream = repository.Load(streamId);
            var result = stream.Attach(streamIdToAttach, expiresAt.ToFileTimeUtc());

            if (result.IsSuccessful)
            {
                repository.AttachStream(streamId, streamIdToAttach, expiresAt.ToFileTimeUtc());
            }
        }
        public Result <bool> Detach(byte[] streamId, DateTime detachedSince)
        {
            var streamToDetach = new ActivityStream(streamId);
            var detachedStream = AttachedStreams.Where(x => ByteArrayHelper.Compare(x.StreamId, streamId)).SingleOrDefault() ?? ActivityStream.Empty;

            if (IsEmpty(detachedStream))
            {
                return(Result.Error("No stream found to detach."));
            }

            if (detachedStream.HasExpiration)
            {
                return(Result.Error($"Stream is already detached since {DateTime.FromFileTimeUtc(ExpiresAt).ToShortDateString()}."));
            }

            detachedStream.ExpiresAt = detachedSince.ToFileTimeUtc();
            return(Result.Success);
        }
        public bool Equals(ActivityStream other)
        {
            if (ReferenceEquals(null, other))
            {
                return(false);
            }
            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            var t = GetType();

            if (t != other.GetType())
            {
                return(false);
            }

            return(ByteArrayHelper.Compare(StreamId, other.StreamId));
        }
        public void Validate(EventStreamIntegrityPolicy policy)
        {
            var aggregateCommits = new List <AggregateCommit>();

            byte[] currentId = { 0 };
            foreach (var commit in player.LoadAggregateCommits(1000))
            {
                if (ByteArrayHelper.Compare(currentId, commit.AggregateRootId) == false)
                {
                    if (aggregateCommits.Count > 0)
                    {
                        var result = policy.Apply(new EventStream(aggregateCommits));
                        if (result.IsIntegrityViolated)
                        {
                            throw new Exception(result.Output.ToString());
                        }
                        aggregateCommits.Clear();
                    }
                }

                aggregateCommits.Add(commit);
                currentId = commit.AggregateRootId;
            }
        }
 internal static bool CompareBytes(string first, string second)
 {
     return(ByteArrayHelper.Compare(first.ToIso88591EncodingByteArray(), second.ToIso88591EncodingByteArray()));
 }