Example #1
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }