//
class DefaultConfig : IConfigurationSystem
{
- static string creatingInstance = "137213797382-asad";
- static string buildingData = "1797382-ladgasjkdg";
+ static object creatingInstance = new object ();
+ static object buildingData = new object ();
static DefaultConfig instance;
ConfigurationData config;
//
class FileWatcherCache
{
- Hashtable _cacheTable;
- FileInfo _lastInfo;
- string _filename;
+ Hashtable cacheTable;
+ DateTime lastWriteTime;
+ string filename;
+ static TimeSpan seconds = new TimeSpan (0, 0, 2);
public FileWatcherCache (string filename)
{
- _cacheTable = Hashtable.Synchronized (new Hashtable());
- _lastInfo = new FileInfo (filename);
- _filename = filename;
+ cacheTable = Hashtable.Synchronized (new Hashtable ());
+ lastWriteTime = new FileInfo (filename).LastWriteTime;
+ this.filename = filename;
}
- private bool HasFileChanged()
+ void CheckFileChange ()
{
- FileInfo currentInfo = new FileInfo (_filename);
+ FileInfo info = new FileInfo (filename);
- if (currentInfo.Exists == false)
- return (true);
-
- if (_lastInfo.LastWriteTime != currentInfo.LastWriteTime)
- return (true);
-
- if (_lastInfo.CreationTime != currentInfo.CreationTime)
- return (true);
-
- if (_lastInfo.Length != currentInfo.Length)
- return (true);
-
- return (false);
- }
-
- private void CheckFileChange()
- {
- if (HasFileChanged() == true)
- {
- _lastInfo = new FileInfo (_filename);
-
- _cacheTable.Clear();
- }
- }
-
- public void Set (string key, object value)
- {
- CheckFileChange();
+ if (!info.Exists) {
+ lastWriteTime = DateTime.MinValue;
+ cacheTable.Clear ();
+ return;
+ }
- _cacheTable[key] = value;
+ DateTime writeTime = info.LastWriteTime;
+ TimeSpan ts = (info.LastWriteTime - lastWriteTime);
+ if (ts >= seconds) {
+ lastWriteTime = writeTime;
+ cacheTable.Clear ();
+ }
}
- public object Get (string key)
- {
- CheckFileChange();
+ public object this [string key] {
+ get {
+ CheckFileChange ();
+ return cacheTable [key];
+ }
- return (_cacheTable[key]);
- }
+ set {
+ CheckFileChange();
+ cacheTable [key] = value;
+ }
+ }
}
class ConfigurationData
object emptyMark = new object ();
FileWatcherCache fileCache = null;
- private FileWatcherCache FileCache
- {
- get
- {
- if (fileCache == null)
- {
- if (fileName != null)
- {
+ private FileWatcherCache FileCache {
+ get {
+ if (fileCache == null) {
+ if (fileName != null) {
fileCache = new FileWatcherCache (fileName);
- }
- else
- {
+ } else {
fileCache = parent.FileCache;
}
}
- return (fileCache);
+ return fileCache;
}
}
public object GetConfig (string sectionName)
{
- object config;
-
- // check to see if the handler is in the cache
- config = this.FileCache.Get (sectionName);
+ object config = this.FileCache [sectionName];
if (config == emptyMark)
- return (null);
- else if (config != null)
- return (config);
- else
- {
- config = GetConfigInternal (sectionName);
-
- if (config == null)
- this.FileCache.Set (sectionName, emptyMark);
- else
- this.FileCache.Set (sectionName, config);
-
- return (config);
- }
+ return null;
+
+ if (config != null)
+ return config;
+
+ config = GetConfigInternal (sectionName);
+ this.FileCache [sectionName] = (config == null) ? emptyMark : config;
+ return config;
}
private object LookForFactory (string key)