private static IStateResult configureUpdateOnlyPush <T>( TransitionHandlerProvider transitions, IStateResult entryPoint, BasePushState <T> push, PushOneEntityState <T> pushOne, BaseUpdateEntityState <T> update, BaseUnsyncableEntityState <T> markUnsyncable, CheckServerStatusState checkServerStatus, ResetAPIDelayState finished) where T : class, IBaseModel, IDatabaseSyncable { transitions.ConfigureTransition(entryPoint, push.Start); transitions.ConfigureTransition(push.PushEntity, pushOne.Start); transitions.ConfigureTransition(pushOne.UpdateEntity, update.Start); transitions.ConfigureTransition(pushOne.CreateEntity, new InvalidTransitionState($"Creating is not supported for {typeof(T).Name} during Push sync.").Start); transitions.ConfigureTransition(pushOne.DeleteEntity, new InvalidTransitionState($"Deleting is not supported for {typeof(T).Name} during Push sync.").Start); transitions.ConfigureTransition(pushOne.DeleteEntityLocally, new InvalidTransitionState($"Deleting locally is not supported for {typeof(T).Name} during Push sync.").Start); transitions.ConfigureTransition(update.ClientError, markUnsyncable.Start); transitions.ConfigureTransition(update.ServerError, checkServerStatus.Start); transitions.ConfigureTransition(update.UnknownError, checkServerStatus.Start); transitions.ConfigureTransition(checkServerStatus.Retry, checkServerStatus.Start); transitions.ConfigureTransition(checkServerStatus.ServerIsAvailable, push.Start); transitions.ConfigureTransition(update.UpdatingSucceeded, finished.Start); transitions.ConfigureTransition(finished.PushNext, push.Start); return(push.NothingToPush); }
private static IStateResult configurePush <T>( TransitionHandlerProvider transitions, IStateResult entryPoint, BasePushState <T> push, PushOneEntityState <T> pushOne, BaseCreateEntityState <T> create, BaseUpdateEntityState <T> update, BaseDeleteEntityState <T> delete, BaseDeleteLocalEntityState <T> deleteLocal, TryResolveClientErrorState <T> tryResolveClientError, BaseUnsyncableEntityState <T> markUnsyncable, CheckServerStatusState checkServerStatus, ResetAPIDelayState finished) where T : class, IBaseModel, IDatabaseSyncable { transitions.ConfigureTransition(entryPoint, push.Start); transitions.ConfigureTransition(push.PushEntity, pushOne.Start); transitions.ConfigureTransition(pushOne.CreateEntity, create.Start); transitions.ConfigureTransition(pushOne.UpdateEntity, update.Start); transitions.ConfigureTransition(pushOne.DeleteEntity, delete.Start); transitions.ConfigureTransition(pushOne.DeleteEntityLocally, deleteLocal.Start); transitions.ConfigureTransition(create.ClientError, tryResolveClientError.Start); transitions.ConfigureTransition(update.ClientError, tryResolveClientError.Start); transitions.ConfigureTransition(delete.ClientError, tryResolveClientError.Start); transitions.ConfigureTransition(create.ServerError, checkServerStatus.Start); transitions.ConfigureTransition(update.ServerError, checkServerStatus.Start); transitions.ConfigureTransition(delete.ServerError, checkServerStatus.Start); transitions.ConfigureTransition(create.UnknownError, checkServerStatus.Start); transitions.ConfigureTransition(update.UnknownError, checkServerStatus.Start); transitions.ConfigureTransition(delete.UnknownError, checkServerStatus.Start); transitions.ConfigureTransition(tryResolveClientError.UnresolvedTooManyRequests, checkServerStatus.Start); transitions.ConfigureTransition(tryResolveClientError.Unresolved, markUnsyncable.Start); transitions.ConfigureTransition(checkServerStatus.Retry, checkServerStatus.Start); transitions.ConfigureTransition(checkServerStatus.ServerIsAvailable, push.Start); transitions.ConfigureTransition(create.CreatingFinished, finished.Start); transitions.ConfigureTransition(update.UpdatingSucceeded, finished.Start); transitions.ConfigureTransition(delete.DeletingFinished, finished.Start); transitions.ConfigureTransition(deleteLocal.Deleted, finished.Start); transitions.ConfigureTransition(deleteLocal.DeletingFailed, finished.Start); transitions.ConfigureTransition(finished.Continue, push.Start); return(push.NothingToPush); }