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)); }
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)); }
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; }
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, });
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(); } } } }
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(); } } } }
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); }
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); }
public void init() { this._periodicityType = determinePeriodicityType(); this._nextRoll = nextTriggeringTime(this._currentRoll, this._period); }