/***************************************************************************
* 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.Xml;
using System.Xml.XPath;
namespace UtilidadesCSharp.Schedule
{
///
/// Null event strorage disables error recovery by returning now for the last time an event fired.
///
public class NullEventStorage : IEventStorage
{
public NullEventStorage()
{
}
public void RecordLastTime(DateTime Time)
{
}
public DateTime ReadLastTime()
{
return DateTime.Now;
}
}
///
/// Local event strorage keeps the last time in memory so that skipped events are not recovered.
///
public class LocalEventStorage : IEventStorage
{
public LocalEventStorage()
{
_LastTime = DateTime.MaxValue;
}
public void RecordLastTime(DateTime Time)
{
_LastTime = Time;
}
public DateTime ReadLastTime()
{
if (_LastTime == DateTime.MaxValue)
_LastTime = DateTime.Now;
return _LastTime;
}
DateTime _LastTime;
}
///
/// FileEventStorage saves the last time in an XmlDocument so that recovery will include periods that the
/// process is shutdown.
///
public class FileEventStorage : IEventStorage
{
public FileEventStorage(string FileName, string XPath)
{
_FileName = FileName;
_XPath = XPath;
}
public void RecordLastTime(DateTime Time)
{
_Doc.SelectSingleNode(_XPath).Value = Time.ToString();
_Doc.Save(_FileName);
}
public DateTime ReadLastTime()
{
_Doc.Load(_FileName);
string Value = _Doc.SelectSingleNode(_XPath).Value;
if (Value == null || Value == string.Empty)
return DateTime.Now;
return DateTime.Parse(Value);
}
string _FileName;
string _XPath;
XmlDocument _Doc = new XmlDocument();
}
}