/// <summary> /// Gets the actor reminder with specified reminder name. /// </summary> /// <param name="reminderName">Name</param> /// <returns>IActorReminder</returns> protected IActorReminder GetReminder(string reminderName) { var reminders = ActorModel.GetReminders(ActorModel.Runtime.GetCurrentMachineId()); var reminder = reminders.SingleOrDefault(val => ((ActorReminder)val).Name.Equals(reminderName)); return((IActorReminder)reminder); }
/// <summary> /// Returns the reminder which has the name "reminderName" /// </summary> /// <param name="reminderName">string</param> /// <returns>Task<IGrainReminder></returns> protected virtual Task <IGrainReminder> GetReminder(string reminderName) { var reminders = ActorModel.GetReminders(ActorModel.Runtime.GetCurrentMachineId()); var reminder = reminders.SingleOrDefault(val => ((GrainReminder)val).ReminderName.Equals(reminderName)); var task = new ActorCompletionTask <IGrainReminder>(); var actorCompletionMachine = task.ActorCompletionMachine; ActorModel.Runtime.SendEvent(actorCompletionMachine, new ActorCompletionMachine.SetResultRequest(reminder)); return(task); }
/// <summary> /// Returns all the reminders of this grain /// </summary> /// <returns>Task<List<IGrainReminder>></returns> protected virtual Task <List <IGrainReminder> > GetReminders() { var reminders = new List <IGrainReminder>(); foreach (var reminder in ActorModel.GetReminders(ActorModel.Runtime.GetCurrentMachineId())) { reminders.Add(reminder as IGrainReminder); } var task = new ActorCompletionTask <List <IGrainReminder> >(); var actorCompletionMachine = task.ActorCompletionMachine; ActorModel.Runtime.SendEvent(actorCompletionMachine, new ActorCompletionMachine.SetResultRequest(reminders)); return(task); }
/// <summary> /// Unregisters a reminder. /// </summary> /// <param name="reminder">IGrainReminder</param> /// <returns>Task</returns> protected virtual Task UnregisterReminder(IGrainReminder reminder) { var reminders = ActorModel.GetReminders(ActorModel.Runtime.GetCurrentMachineId()); var reminderToBeRemoved = reminders.SingleOrDefault(val => ((GrainReminder)val).ReminderName.Equals(reminder.ReminderName)); if (reminderToBeRemoved != null) { reminderToBeRemoved.Dispose(); } var task = new ActorCompletionTask <object>(); var actorCompletionMachine = task.ActorCompletionMachine; ActorModel.Runtime.SendEvent(actorCompletionMachine, new ActorCompletionMachine.SetResultRequest(true)); return(task); }
/// <summary> /// Unregisters the specified reminder. /// </summary> /// <param name="reminder">IActorReminder</param> /// <returns>Task</returns> protected Task UnregisterReminderAsync(IActorReminder reminder) { ActorModel.Assert(reminder != null, "Cannot unregister a 'null' reminder."); var reminders = ActorModel.GetReminders(ActorModel.Runtime.GetCurrentMachineId()); var reminderToBeRemoved = reminders.SingleOrDefault(val => ((ActorReminder)val).Name.Equals(reminder.Name)); if (reminderToBeRemoved != null) { reminderToBeRemoved.Dispose(); } var task = new ActorCompletionTask <object>(); var actorCompletionMachine = task.ActorCompletionMachine; ActorModel.Runtime.SendEvent(actorCompletionMachine, new ActorCompletionMachine.SetResultRequest(true)); return(task); }
/// <summary> /// Registers the specified reminder. /// </summary> /// <param name="reminderName">Name of the reminder to register</param> /// <param name="state">State associated with reminder</param> /// <param name="dueTime">TimeSpan when actor timer is first due</param> /// <param name="period">TimeSpan for subsequent actor timer invocation</param> /// <returns>IActorReminder</returns> protected Task <IActorReminder> RegisterReminderAsync(string reminderName, byte[] state, TimeSpan dueTime, TimeSpan period) { var reminders = ActorModel.GetReminders(ActorModel.Runtime.GetCurrentMachineId()); var reminder = reminders.SingleOrDefault(val => ((ActorReminder)val).Name.Equals(reminderName)); var task = new ActorCompletionTask <IActorReminder>(); var actorCompletionMachine = task.ActorCompletionMachine; if (reminder != null) { ActorModel.Runtime.SendEvent(actorCompletionMachine, new ActorCompletionMachine.SetResultRequest(reminder)); } else { ActorModel.Runtime.CreateMachine(typeof(ActorReminderMachine), reminderName, new ReminderMachine.InitEvent(ActorModel.Runtime.GetCurrentMachineId(), actorCompletionMachine, reminderName, null)); } return(task); }