private Proto.ReminderSchedule ScheduleToProto(Reminder.Schedule schedule) { var proto = new ReminderSchedule { TaskId = schedule.TaskId, Recipient = ActorPathToProto(schedule.Recipient), Payload = MessageToProto(schedule.Message), TriggerDate = schedule.TriggerDateUtc.Ticks }; switch (schedule) { case Reminder.ScheduleRepeatedly repeat: proto.RepeatInterval = repeat.RepeatInterval.Ticks; break; case Reminder.ScheduleCron cron: proto.CronExpression = cron.CronExpression.ToString(); break; } if (schedule.Ack != null) { proto.Ack = MessageToProto(schedule.Ack); } return(proto); }
public void ReminderSerializer_must_serialize_Reminder_Schedule() { var expected = new Reminder.Schedule("task-1", TestActor.Path, new TestMessage("hello"), DateTime.UtcNow, ack: "reply"); var actual = Roundtrip(expected); actual.Should().Be(expected); }
public void when_email_is_scheduled_is_sent_when_is_due() { var settings = ReminderSettings.Default .WithPersistenceId("email") .WithTickInterval(TimeSpan.FromMilliseconds(500)) .WithSnapshotInterval(5); var taskId = Guid.NewGuid().ToString(); var probe = CreateTestProbe("email-sender"); var scheduler = (TestScheduler)Sys.Scheduler; var emailScheduler = Sys.ActorOf(Props.Create(() => new EmailScheduler(settings)).WithDispatcher(CallingThreadDispatcher.Id), "email"); var when = DateTime.UtcNow.AddDays(1); var job = new ScheduleEmail("me", "you", "hi"); var ack = new Ack(taskId); var schedule = new Reminder.Schedule(taskId, probe.Ref.Path, job, when, ack); emailScheduler.Tell(schedule, probe); probe.ExpectMsg <Ack>(x => x.Id == taskId); scheduler.AdvanceTo(when); probe.ExpectMsg <ScheduleEmail>(x => x.Body == job.Body && x.From == job.From && x.To == job.To); }
private Proto.ReminderEntry EntryToProto(Reminder.Schedule schedule) { var proto = new Proto.ReminderEntry { TaskId = schedule.TaskId, Recipient = ActorPathToProto(schedule.Recipient), Payload = MessageToProto(schedule.Message), TriggerDate = schedule.TriggerDateUtc.Ticks }; switch (schedule) { case Reminder.ScheduleRepeatedly repeat: proto.RepeatInterval = repeat.RepeatInterval.Ticks; break; case Reminder.ScheduleCron cron: proto.CronExpression = cron.CronExpression; break; } return(proto); }
private Proto.ReminderSchedule ScheduleToProto(Reminder.Schedule schedule) { var proto = new ReminderSchedule { TaskId = schedule.TaskId, Recipient = ActorPathToProto(schedule.Recipient), Payload = MessageToProto(schedule.Message), TriggerDate = schedule.TriggerDateUtc.Ticks }; if (schedule.RepeatInterval.HasValue) { proto.RepeatInterval = schedule.RepeatInterval.Value.Ticks; } if (schedule.Ack != null) { proto.Ack = MessageToProto(schedule.Ack); } return(proto); }