public static EventActivityBinder <JobSaga, T> RequestJobSlot <T>(this EventActivityBinder <JobSaga, T> binder, JobStateMachine machine) where T : class { return(binder.SendAsync(machine.JobTypeSagaEndpointAddress, context => context.Init <AllocateJobSlot>(new { JobId = context.Instance.CorrelationId, context.Instance.JobTypeId, context.Instance.JobTimeout }), context => context.ResponseAddress = machine.JobSagaEndpointAddress) .TransitionTo(machine.AllocatingJobSlot)); }
public static EventActivityBinder <JobSaga, T> WaitForJobSlot <T>(this EventActivityBinder <JobSaga, T> binder, JobStateMachine machine) where T : class { return(binder.Schedule(machine.JobSlotWaitElapsed, context => context.Init <JobSlotWaitElapsed>(new { JobId = context.Instance.CorrelationId })) .TransitionTo(machine.WaitingForSlot)); }
public static EventActivityBinder <JobSaga, JobSlotAllocated> RequestStartJob(this EventActivityBinder <JobSaga, JobSlotAllocated> binder, JobStateMachine machine) { return(binder.SendAsync(machine.JobAttemptSagaEndpointAddress, context => context.Init <StartJobAttempt>(new { context.Data.JobId, context.Instance.AttemptId, context.Instance.ServiceAddress, context.Instance.RetryAttempt, context.Instance.Job }), context => context.ResponseAddress = machine.JobSagaEndpointAddress) .TransitionTo(machine.StartingJobAttempt)); }
public static EventActivityBinder <JobSaga> SendJobSlotReleased(this EventActivityBinder <JobSaga> binder, JobStateMachine machine, JobSlotDisposition disposition) { return(binder.SendAsync(context => machine.JobTypeSagaEndpointAddress, context => context.Init <JobSlotReleased>(new { JobId = context.Instance.CorrelationId, context.Instance.JobTypeId, Disposition = disposition == JobSlotDisposition.Faulted && context.Instance.Reason.Contains("(Suspect)") ? JobSlotDisposition.Suspect : disposition }))); }
public static EventActivityBinder <JobSaga> SendJobSlotReleased(this EventActivityBinder <JobSaga> binder, JobStateMachine machine) { return(binder.SendAsync(context => machine.JobTypeSagaEndpointAddress, context => context.Init <JobSlotReleased>(new { JobId = context.Instance.CorrelationId, context.Instance.JobTypeId }))); }