Agregar archivos de proyecto.
This commit is contained in:
80
ScheduledItems/BlockWrapper.cs
Normal file
80
ScheduledItems/BlockWrapper.cs
Normal file
@@ -0,0 +1,80 @@
|
||||
/***************************************************************************
|
||||
* Copyright Andy Brummer 2004-2005
|
||||
*
|
||||
* This code is provided "as is", with absolutely no warranty expressed
|
||||
* or implied. Any use is at your own risk.
|
||||
*
|
||||
* This code may be used in compiled form in any way you desire. This
|
||||
* file may be redistributed unmodified by any means provided it is
|
||||
* not sold for profit without the authors written consent, and
|
||||
* providing that this notice and the authors name is included. If
|
||||
* the source code in this file is used in any commercial application
|
||||
* then a simple email would be nice.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
|
||||
namespace UtilidadesCSharp.Schedule
|
||||
{
|
||||
/// <summary>
|
||||
/// This class will be used to implement a filter that enables a window of activity. For cases where you want to
|
||||
/// run every 15 minutes between 6:00 AM and 5:00 PM. Or just on weekdays or weekends.
|
||||
/// </summary>
|
||||
public class BlockWrapper : IScheduledItem
|
||||
{
|
||||
public BlockWrapper(IScheduledItem item, string StrBase, string BeginOffset, string EndOffset)
|
||||
{
|
||||
_Item = item;
|
||||
_Begin = new ScheduledTime(StrBase, BeginOffset);
|
||||
_End = new ScheduledTime(StrBase, EndOffset);
|
||||
}
|
||||
public void AddEventsInInterval(DateTime Begin, DateTime End, ArrayList List)
|
||||
{
|
||||
DateTime Next = NextRunTime(Begin, true);
|
||||
while (Next < End)
|
||||
{
|
||||
List.Add(Next);
|
||||
Next = NextRunTime(Next, false);
|
||||
}
|
||||
}
|
||||
|
||||
public DateTime NextRunTime(DateTime time, bool AllowExact)
|
||||
{
|
||||
return NextRunTime(time, 100, AllowExact);
|
||||
}
|
||||
|
||||
DateTime NextRunTime(DateTime time, int count, bool AllowExact)
|
||||
{
|
||||
if (count == 0)
|
||||
throw new Exception("Invalid block wrapper combination.");
|
||||
|
||||
DateTime
|
||||
temp = _Item.NextRunTime(time, AllowExact),
|
||||
begin = _Begin.NextRunTime(time, true),
|
||||
end = _End.NextRunTime(time, true);
|
||||
System.Diagnostics.Debug.WriteLine(string.Format("{0} {1} {2} {3}", time, begin, end, temp));
|
||||
bool A = temp > end, B = temp < begin, C = end < begin;
|
||||
System.Diagnostics.Debug.WriteLine(string.Format("{0} {1} {2}", A, B, C));
|
||||
if (C)
|
||||
{
|
||||
if (A && B)
|
||||
return NextRunTime(begin, --count, false);
|
||||
else
|
||||
return temp;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!A && !B)
|
||||
return temp;
|
||||
if (!A)
|
||||
return NextRunTime(begin, --count, false);
|
||||
else
|
||||
return NextRunTime(end, --count, false);
|
||||
}
|
||||
}
|
||||
private IScheduledItem _Item;
|
||||
private ScheduledTime _Begin, _End;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user