예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
        /// <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);
        }