public void Handle(ResumeScheduledMessageWithOffset message) { if (Data.LastUpdateCommandRequestUtc != null && Data.LastUpdateCommandRequestUtc > message.MessageRequestTimeUtc) { return; } Data.SchedulingPaused = false; var rescheduledTime = Data.OriginalMessageData.OriginalRequestSendTime.Add(message.Offset); Data.TimeoutCounter++; RequestUtcTimeout(rescheduledTime, new ScheduleEmailTimeout { TimeoutCounter = Data.TimeoutCounter }); Bus.Publish(new MessageRescheduled { CoordinatorId = Data.OriginalMessageData.RequestingCoordinatorId, ScheduleMessageId = Data.ScheduleMessageId, RescheduledTimeUtc = rescheduledTime, // TODO : Should we remove the number or have a different thing for emails? }); Bus.SendLocal(new ScheduleStatusChanged { RequestTimeUtc = message.MessageRequestTimeUtc, ScheduleId = message.ScheduleMessageId, ScheduleTimeUtc = rescheduledTime, Status = MessageStatus.Scheduled }); Data.LastUpdateCommandRequestUtc = message.MessageRequestTimeUtc; }
public void ResumePausedSchedule_Data() { var sagaId = Guid.NewGuid(); var scheduleMessageId = Guid.NewGuid(); var scheduleSmsForSendingLater = new ScheduleSmsForSendingLater { SmsData = new SmsData("1", "msg"), SmsMetaData = new SmsMetaData(), SendMessageAtUtc = DateTime.Now }; var scheduledSmsData = new ScheduledSmsData { Id = sagaId, ScheduleMessageId = scheduleMessageId, Originator = "place", OriginalMessageId = Guid.NewGuid().ToString(), OriginalMessage = scheduleSmsForSendingLater, OriginalMessageData = new OriginalMessageData(scheduleSmsForSendingLater) }; Test.Initialize(); var rescheduleMessage = new ResumeScheduledMessageWithOffset(scheduleMessageId, new TimeSpan(0, 1, 0, 0)); var rescheduledTime = scheduledSmsData.OriginalMessage.SendMessageAtUtc.Add(rescheduleMessage.Offset); Test.Saga <ScheduleSms>() .WithExternalDependencies(a => { a.Data = scheduledSmsData; }) .ExpectTimeoutToBeSetAt <ScheduleSmsTimeout>((state, span) => span == rescheduledTime) .ExpectPublish <MessageRescheduled>() .When(s => s.Handle(rescheduleMessage)); }
public void ResumePausedSchedule_Data() { var sagaId = Guid.NewGuid(); var scheduleMessageId = Guid.NewGuid(); var scheduledEmailData = new ScheduledEmailData { Id = sagaId, ScheduleMessageId = scheduleMessageId, Originator = "place", OriginalMessageId = Guid.NewGuid().ToString(), OriginalMessageData = new OriginalEmailMessageData(new ScheduleEmailForSendingLater { EmailData = new EmailData() }) { OriginalRequestSendTime = DateTime.Now } }; Test.Initialize(); var rescheduleMessage = new ResumeScheduledMessageWithOffset(scheduleMessageId, new TimeSpan(0, 1, 0, 0)); var rescheduledTime = scheduledEmailData.OriginalMessageData.OriginalRequestSendTime.Add(rescheduleMessage.Offset); Test.Saga <EmailScheduler>() .WithExternalDependencies(a => { a.Data = scheduledEmailData; }) .ExpectTimeoutToBeSetAt <ScheduleEmailTimeout>((state, span) => span == rescheduledTime) .ExpectPublish <MessageRescheduled>() .When(s => s.Handle(rescheduleMessage)); }
public void Handle(ResumeScheduledMessageWithOffset scheduleSmsForSendingLater) { if (Data.LastUpdateCommandRequestUtc != null && Data.LastUpdateCommandRequestUtc > scheduleSmsForSendingLater.MessageRequestTimeUtc) { return; } Data.SchedulingPaused = false; var rescheduledTime = Data.OriginalMessage.SendMessageAtUtc.Add(scheduleSmsForSendingLater.Offset); Data.TimeoutCounter++; RequestUtcTimeout(rescheduledTime, new ScheduleSmsTimeout { TimeoutCounter = Data.TimeoutCounter }); Bus.Publish(new MessageRescheduled { CoordinatorId = Data.OriginalMessageData.RequestingCoordinatorId, ScheduleMessageId = Data.ScheduleMessageId, RescheduledTimeUtc = rescheduledTime, Number = Data.OriginalMessageData.Number }); Bus.SendLocal(new ScheduleStatusChanged { RequestTimeUtc = scheduleSmsForSendingLater.MessageRequestTimeUtc, ScheduleId = scheduleSmsForSendingLater.ScheduleMessageId, ScheduleTimeUtc = rescheduledTime, Status = MessageStatus.Scheduled }); Data.LastUpdateCommandRequestUtc = scheduleSmsForSendingLater.MessageRequestTimeUtc; }