/// <summary>
		/// Process the return from the store, getting a the last known time an event fired.
		/// </summary>
		protected void LastEventDateTimeRecordset(dynamic signalRecordset)
		{
			foreach (dynamic signal in signalRecordset.Records)
			{
				string eventName = signal.EventName;
				DateTime eventDateTime = signal.EventDateTime;

				// If the interval timer doesn't exist yet, then create a placeholder.
				if (!intervalMap.ContainsKey(eventName))
				{
					intervalMap[eventName] = new IntervalTimer(rsys, this) { EventName = eventName, LastEventTime = eventDateTime, PreExisting = true };
				}
				else
				{
					// If it does exist but it's not running yet, update the last event time.
					if (!intervalMap[eventName].Running)
					{
						intervalMap[eventName].LastEventTime = eventDateTime;
						intervalMap[eventName].PreExisting = true;
					}
				}
			}

			// Now that we know where we're at, we can fire expired events.
			FireExpiredEvents();
			ready = true;
		}
		/// <summary>
		/// Process a configuration carrier, which will add a new timer event.
		/// </summary>
		/// <param name="signal"></param>
		protected void IntervalTimerConfiguration(dynamic signal)
		{
			string eventName = signal.EventName;

			// If the interval timer does not exist, create it now.
			if (!intervalMap.ContainsKey(eventName))
			{
				IntervalTimer interval = new IntervalTimer(rsys, this)
				{
					StartDateTime = signal.StartDateTime,
					Interval = signal.Interval,
					EventName = signal.EventName,
					IgnoreMissedIntervals = signal.IgnoreMissedIntervals,
					PreExisting = false
				};
				intervalMap[eventName] = interval;
			}
			else
			{
				// We already have an interval timer for this event.  Fill in the missing pieces.
				intervalMap[eventName].StartDateTime = signal.StartDateTime;
				intervalMap[eventName].Interval = signal.Interval;
				intervalMap[eventName].IgnoreMissedIntervals = signal.IgnoreMissedIntervals;
			}

			FireExpiredEvents();
		}