Ejemplo n.º 1
0
        private async Task SetErrorStatus(TActor actor, TStatus newStatus, string message, Exception ex)
        {
            // This method should not throw, see ProcessTranstions for the usage pattern
            try
            {
                Logger.LogError(ex, "{0} - process error: {message}.", actor, message);
                var e = new StateMachineStatusChangingArgs <TActor, TStatus>(actor, newStatus, message);
                await OnStatusChanging(e);

                actor.Status = newStatus;
            }
            catch (Exception exception)
            {
                Logger.LogError(exception, "{actor} - Unexpected error while setting error status: {message}.");
                actor.Status = newStatus; // Assume the proposed error status even in case of a failure
            }
        }
Ejemplo n.º 2
0
        protected async Task <TStatus> ChangeStatus(TActor actor, TStatus newStatus, string message = null)
        {
            if (actor.Status.Equals(newStatus))
            {
                return(newStatus);
            }

            try
            {
                var e = new StateMachineStatusChangingArgs <TActor, TStatus>(actor, newStatus, message);
                await OnStatusChanging(e);

                actor.Status = e.NewStatus;
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "{actor}: Status change failed ({statusFrom} -> {statusTo}).", actor, actor.Status, newStatus);
                throw new StateMachineException("Status change failed.", ex);
            }

            return(actor.Status);
        }
Ejemplo n.º 3
0
 protected virtual Task OnStatusChanging(StateMachineStatusChangingArgs <TActor, TStatus> e)
 {
     return(Task.CompletedTask);
 }
 protected override async Task OnStatusChanging(StateMachineStatusChangingArgs <ScheduleVisitActor, ScheduleVisitStatus> e)
 {
     await ScheduleService.ChangeStatus(e.Actor.RequestId, e.CurrentStatus.GetId(), e.NewStatus.GetId(), e.Message);
 }