Пример #1
0
        private string CreateTaskIdentifier(PeriodicityType periodicity, int hourOffset, int minuteOffset, Uri url)
        {
            string keyFormat;

            switch (periodicity)
            {
            case PeriodicityType.Hourly:
                keyFormat = "H~XX:{2:00}~{3}";
                break;

            case PeriodicityType.Daily:
                keyFormat = "D~{1:00}:{2:00}~{3}";
                break;

            default:
                keyFormat = "{0}~{1:00}:{2:00}~{3}";
                break;
            }

            string compoundKey = string.Format(CultureInfo.InvariantCulture, keyFormat, (int)periodicity, hourOffset, minuteOffset, url);

            byte[] textBytes = Encoding.UTF8.GetBytes(compoundKey);
            byte[] hashBytes = _HashAlgorithm.ComputeHash(textBytes);
            return(ByteArrayToHexidecimalString(hashBytes));
        }
Пример #2
0
        internal ConfiguredTask Create(IClockSource clockSource, PeriodicityType periodicity, int hourOffset, int minuteOffset, Uri url)
        {
            Uri absoluteUrl;

            if (url.IsAbsoluteUri)
            {
                absoluteUrl = url;
            }
            else
            {
                if (_CallbackBaseUri == null)
                {
                    throw new InvalidOperationException(string.Format("The recurring task targeting \"{0}\" is not an absolute URL and no callbackBaseUri attribute was supplied.", url));
                }

                if (!Uri.TryCreate(_CallbackBaseUri, url, out absoluteUrl))
                {
                    throw new InvalidOperationException(string.Format("The recurring task targeting \"{0}\" is not an absolute URL and it cannot be combined with the callbackBaseUri attribute of \"{1}\".", url, _CallbackBaseUri));
                }
            }

            string identifier = this.CreateTaskIdentifier(periodicity, hourOffset, minuteOffset, absoluteUrl);

            return(new ConfiguredTask(identifier, clockSource, periodicity, hourOffset, minuteOffset, absoluteUrl));
        }
Пример #3
0
 internal ConfiguredTask(string identifier, IClockSource clockSource, PeriodicityType periodicity, int hourOffset, int minuteOffset, Uri url)
 {
     this.Identifier   = identifier;
     this._ClockSource = clockSource;
     this.Periodicity  = periodicity;
     this.HourOffset   = hourOffset;
     this.MinuteOffset = minuteOffset;
     this.Url          = url;
 }
Пример #4
0
		internal ConfiguredTask(string identifier, IClockSource clockSource, PeriodicityType periodicity, int hourOffset, int minuteOffset, Uri url)
		{
			this.Identifier = identifier;
			this._ClockSource = clockSource;
			this.Periodicity = periodicity;
			this.HourOffset = hourOffset;
			this.MinuteOffset = minuteOffset;
			this.Url = url;
		}
 internal ConfiguredTask(string identifier, IClockSource clockSource, PeriodicityType periodicity, int dayOffset, int hourOffset, int minuteOffset, Uri url)
 {
     Identifier   = identifier;
     _ClockSource = clockSource;
     Periodicity  = periodicity;
     DayOffset    = dayOffset;
     HourOffset   = hourOffset;
     MinuteOffset = minuteOffset;
     Url          = url;
 }
Пример #6
0
 private static int GetDayInterval(PeriodicityType periodicityType)
 {
     return(periodicityType switch
     {
         PeriodicityType.Biweekly => 15,
         PeriodicityType.Monthly => 30,
         PeriodicityType.BiMonthly => 60,
         PeriodicityType.Trimester => 90,
         PeriodicityType.Quarter => 120,
         PeriodicityType.FiveMonths => 150,
         PeriodicityType.Biannual => 180,
         PeriodicityType.Annual => 360,
         _ => - 1,
     });
Пример #7
0
        private void AddTask(IClockSource clockSource, PeriodicityType periodicity, int hour, int minute, Uri url)
        {
            using (var taskBuilder = new TaskBuilder(this.CallbackBaseUri))
            {
                ConfiguredTask taskConfig = taskBuilder.Create(clockSource, periodicity, hour, minute, url);

                if (_TaskCollection.Add(taskConfig))
                {
                    if (this.CallbackBaseUri == null)
                    {
                        this.ScavengeForCallbackBaseUri(taskConfig.Url);
                    }

                    this.Schedule(this.PrepareNextCallback(taskConfig));

                    if (!_CurrentState.IsActive)
                    {
                        Start();
                    }
                }
            }
        }
Пример #8
0
        async Task AddTaskAsync(IClockSource clockSource, PeriodicityType periodicity, int day, int hour, int minute, Uri url)
        {
            using (var taskBuilder = new TaskBuilder(CallbackBaseUri))
            {
                ConfiguredTask taskConfig = taskBuilder.Create(clockSource, periodicity, day, hour, minute, url);

                if (await _taskCollection.AddAsync(taskConfig))
                {
                    if (CallbackBaseUri == null)
                    {
                        ScavengeForCallbackBaseUri(taskConfig.Url);
                    }

                    await Schedule(PrepareNextCallback(taskConfig));

                    if (!_currentState.IsActive)
                    {
                        await Start();
                    }
                }
            }
        }
Пример #9
0
        internal ConfiguredTask Create(IClockSource clockSource, PeriodicityType periodicity, int hourOffset, int minuteOffset, Uri url)
        {
            Uri absoluteUrl;

            if (url.IsAbsoluteUri)
            {
                absoluteUrl = url;
            }
            else
            {
                if (_CallbackBaseUri == null)
                {
                    throw new InvalidOperationException(string.Format("The recurring task targeting \"{0}\" is not an absolute URL and no callbackBaseUri attribute was supplied.", url));
                }

                if (!Uri.TryCreate(_CallbackBaseUri, url, out absoluteUrl))
                {
                    throw new InvalidOperationException(string.Format("The recurring task targeting \"{0}\" is not an absolute URL and it cannot be combined with the callbackBaseUri attribute of \"{1}\".", url, _CallbackBaseUri));
                }
            }

            string identifier = this.CreateTaskIdentifier(periodicity, hourOffset, minuteOffset, absoluteUrl);
            return new ConfiguredTask(identifier, clockSource, periodicity, hourOffset, minuteOffset, absoluteUrl);
        }
Пример #10
0
		private string CreateTaskIdentifier(PeriodicityType periodicity, int hourOffset, int minuteOffset, Uri url)
		{
			string keyFormat;

			switch (periodicity)
			{
				case PeriodicityType.Hourly:
					keyFormat = "H~XX:{2:00}~{3}";
					break;

				case PeriodicityType.Daily:
					keyFormat = "D~{1:00}:{2:00}~{3}";
					break;

				default:
					keyFormat = "{0}~{1:00}:{2:00}~{3}";
					break;
			}

			string compoundKey = string.Format(CultureInfo.InvariantCulture, keyFormat, (int)periodicity, hourOffset, minuteOffset, url);
			byte[] textBytes = Encoding.UTF8.GetBytes(compoundKey);
			byte[] hashBytes = _HashAlgorithm.ComputeHash(textBytes);
			return ConvertByteArrayToHexadecimalString(hashBytes);
		}
Пример #11
0
 public void init()
 {
     this._periodicityType = determinePeriodicityType();
     this._nextRoll        = nextTriggeringTime(this._currentRoll, this._period);
 }
Пример #12
0
 public void init()
 {
     this._periodicityType = determinePeriodicityType();
     this._nextRoll = nextTriggeringTime(this._currentRoll, this._period);
 }
Пример #13
0
        private void AddTask(IClockSource clockSource, PeriodicityType periodicity, int hour, int minute, Uri url)
        {
            using (var taskBuilder = new TaskBuilder(this.CallbackBaseUri))
            {
                ConfiguredTask taskConfig = taskBuilder.Create(clockSource, periodicity, hour, minute, url);

                if (_TaskCollection.Add(taskConfig))
                {
                    if (this.CallbackBaseUri == null)
                    {
                        this.ScavengeForCallbackBaseUri(taskConfig.Url);
                    }

                    this.Schedule(this.PrepareNextCallback(taskConfig));

                    if (!_CurrentState.IsActive)
                    {
                        Start();
                    }
                }
            }
        }