Beispiel #1
0
        public void ConfigureTransition(IStateResult result, ISyncState state)
        {
            Ensure.Argument.IsNotNull(result, nameof(result));
            Ensure.Argument.IsNotNull(state, nameof(state));

            transitionHandlers.Add(result, _ => state.Start());
        }
Beispiel #2
0
        private List <IAggregateEvent> GetPendingEvents <T>(ISyncState syncState, IList <IAggregateEvent> remoteEvents) where T : class, IAggregateRoot, new()
        {
            if (syncState.LastSyncedVersion == 0)
            {
                // if we've never synced, then this aggregate must have been created locally, any events either in
                // the event store or from pending commands are pending
                return(this.localEventStore.GetAllEvents(syncState.Identity).ToList());
            }

            // if we have synced the aggregate at least once, then we need to get events from pending commands
            var pendingCommandsToExecute = this.pendingCommands.PendingCommandsForAggregate(syncState.Identity).ToList();

            if (pendingCommandsToExecute.Count == 0)
            {
                return(new List <IAggregateEvent>());
            }

            var aggregate = new T();

            aggregate.Identity = syncState.Identity;
            ((IEventSourced)aggregate).LoadFromEvents(remoteEvents);

            var exec = new ExecutingCommandExecutor(aggregate);

            exec.Execute(pendingCommandsToExecute, 0);

            if (this.snapshotRepository != null && aggregate is ISnapshotSupport)
            {
                this.snapshotRepository.Save(((ISnapshotSupport)aggregate).GetSnapshot());
            }

            return(aggregate.UncommittedEvents.ToList());
        }
Beispiel #3
0
        public void ConfigureTransition <T>(StateResult <T> result, ISyncState <T> state)
        {
            Ensure.Argument.IsNotNull(result, nameof(result));
            Ensure.Argument.IsNotNull(state, nameof(state));

            transitionHandlers.Add(
                result,
                t => state.Start(((Transition <T>)t).Parameter)
                );
        }
        public IState <T> AddSyncState(T id, ISyncState <T> syncState)
        {
            UniTask OnEnter(T from)
            {
                syncState.OnEnter(from); return(UniTask.CompletedTask);
            }

            UniTask OnExit(T to)
            {
                syncState.OnExit(to); return(UniTask.CompletedTask);
            }

            State <T> state = new State <T>(id, OnEnter, OnExit);

            AddState(id, state);
            return(state);
        }
Beispiel #5
0
        /// <summary>
        /// Merges the existing SyncState into the new state.
        /// Merge is done by adding setting the TransferState for files that exist in both SyncStates to the value from "exisitingSyncState"
        /// </summary>
        /// <returns>Returns 'newSyncState'</returns>
        ISyncState MergeSyncStates(ISyncState exisitingSyncState, ISyncState newSyncState)
        {
            //build dictionary with all files from existing sync state
            var filesExisting = exisitingSyncState.Files.ToDictionary(fileItem => fileItem.RelativePath.Trim().ToLower());

            //iterate over all files from new sync state
            foreach (var fileItem in newSyncState.Files)
            {
                var key = fileItem.RelativePath.ToLower().Trim();

                //if file exists in both states, set TransferState to value from existing sync state
                if (filesExisting.ContainsKey(key))
                {
                    fileItem.TransferState.Direction = filesExisting[key].TransferState.Direction;
                    if (Flags.EnabledExtendedTransferState)
                    {
                        fileItem.TransferState.Locations = filesExisting[key].TransferState.Locations;
                    }
                }
            }

            return(newSyncState);
        }
 public IState <T> AddState(T id, ISyncState <T> syncState)
 {
     return(AddSyncState(id, syncState));
 }
 public void Delete(ISyncState lastSyncState)
 {
     Storage.Remove(lastSyncState);
 }
 public void Update(ISyncState syncState)
 {
     // don't have to do anything as object is modified my reference already
 }
Beispiel #9
0
 protected override void CallMethod(StateResult <object> result, ISyncState <object> factory)
 => Provider.ConfigureTransition(result, factory);
Beispiel #10
0
        public void Delete(ISyncState syncState)
        {
            var ddsSyncState = syncState as DdsSyncState;

            _store.Delete(ddsSyncState.Id);
        }
Beispiel #11
0
        public void Update(ISyncState syncState)
        {
            var ddsSyncState = syncState as DdsSyncState;

            _store.Save(ddsSyncState);
        }