1
// ****************************************************************
2
// This is free software licensed under the NUnit license. You
3
// may obtain a copy of the license as well as information regarding
4
// copyright ownership at http://nunit.org.
5
// ****************************************************************
15
/// AssemblyWatcher keeps track of one or more assemblies to
16
/// see if they have changed. It incorporates a delayed notification
17
/// and uses a standard event to notify any interested parties
18
/// about the change. The path to the assembly is provided as
19
/// an argument to the event handler so that one routine can
20
/// be used to handle events from multiple watchers.
22
public class AssemblyWatcher : IAssemblyWatcher
24
static Logger log = InternalTrace.GetLogger(typeof(AssemblyWatcher));
26
private FileSystemWatcher[] fileWatchers;
27
private FileInfo[] files;
29
protected System.Timers.Timer timer;
30
protected string changedAssemblyPath;
32
protected FileInfo GetFileInfo(int index)
37
public void Setup(int delay, string assemblyFileName)
39
Setup(delay, new string[] {assemblyFileName});
42
#if CLR_2_0 || CLR_4_0
43
public void Setup(int delay, System.Collections.Generic.IList<string> assemblies)
45
public void Setup(int delay, System.Collections.IList assemblies)
48
log.Info("Setting up watcher");
50
files = new FileInfo[assemblies.Count];
51
fileWatchers = new FileSystemWatcher[assemblies.Count];
53
for (int i = 0; i < assemblies.Count; i++)
55
log.Debug("Setting up FileSystemWatcher for {0}", assemblies[i]);
57
files[i] = new FileInfo((string)assemblies[i]);
59
fileWatchers[i] = new FileSystemWatcher();
60
fileWatchers[i].Path = files[i].DirectoryName;
61
fileWatchers[i].Filter = files[i].Name;
62
fileWatchers[i].NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite;
63
fileWatchers[i].Changed += new FileSystemEventHandler(OnChanged);
64
fileWatchers[i].EnableRaisingEvents = false;
67
timer = new System.Timers.Timer(delay);
68
timer.AutoReset = false;
69
timer.Enabled = false;
70
timer.Elapsed += new ElapsedEventHandler(OnTimer);
75
EnableWatchers( true );
80
EnableWatchers( false );
83
private void EnableWatchers( bool enable )
85
if (fileWatchers != null)
86
foreach( FileSystemWatcher watcher in fileWatchers )
87
watcher.EnableRaisingEvents = enable;
90
public void FreeResources()
92
log.Info("FreeResources");
96
if (fileWatchers != null)
98
foreach (FileSystemWatcher watcher in fileWatchers)
102
watcher.Changed -= new FileSystemEventHandler(OnChanged);
118
public event AssemblyChangedHandler AssemblyChanged;
120
protected void OnTimer(Object source, ElapsedEventArgs e)
124
log.Info("Timer expired");
130
protected void OnChanged(object source, FileSystemEventArgs e)
132
log.Info("File {0} changed", e.Name);
134
changedAssemblyPath = e.FullPath;
141
log.Info("Setting timer");
151
protected void PublishEvent()
153
if (AssemblyChanged != null)
155
log.Debug("Publishing Event to {0} listeners", AssemblyChanged.GetInvocationList().Length);
156
AssemblyChanged(changedAssemblyPath);
1
// ****************************************************************
2
// This is free software licensed under the NUnit license. You
3
// may obtain a copy of the license as well as information regarding
4
// copyright ownership at http://nunit.org.
5
// ****************************************************************
15
/// AssemblyWatcher keeps track of one or more assemblies to
16
/// see if they have changed. It incorporates a delayed notification
17
/// and uses a standard event to notify any interested parties
18
/// about the change. The path to the assembly is provided as
19
/// an argument to the event handler so that one routine can
20
/// be used to handle events from multiple watchers.
22
public class AssemblyWatcher : IAssemblyWatcher
24
static Logger log = InternalTrace.GetLogger(typeof(AssemblyWatcher));
26
private FileSystemWatcher[] fileWatchers;
27
private FileInfo[] files;
29
protected System.Timers.Timer timer;
30
protected string changedAssemblyPath;
32
protected FileInfo GetFileInfo(int index)
37
public void Setup(int delay, string assemblyFileName)
39
Setup(delay, new string[] {assemblyFileName});
42
#if CLR_2_0 || CLR_4_0
43
public void Setup(int delay, System.Collections.Generic.IList<string> assemblies)
45
public void Setup(int delay, System.Collections.IList assemblies)
48
log.Info("Setting up watcher");
50
files = new FileInfo[assemblies.Count];
51
fileWatchers = new FileSystemWatcher[assemblies.Count];
53
for (int i = 0; i < assemblies.Count; i++)
55
log.Debug("Setting up FileSystemWatcher for {0}", assemblies[i]);
57
files[i] = new FileInfo((string)assemblies[i]);
59
fileWatchers[i] = new FileSystemWatcher();
60
fileWatchers[i].Path = files[i].DirectoryName;
61
fileWatchers[i].Filter = files[i].Name;
62
fileWatchers[i].NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite;
63
fileWatchers[i].Changed += new FileSystemEventHandler(OnChanged);
64
fileWatchers[i].EnableRaisingEvents = false;
67
timer = new System.Timers.Timer(delay);
68
timer.AutoReset = false;
69
timer.Enabled = false;
70
timer.Elapsed += new ElapsedEventHandler(OnTimer);
75
EnableWatchers( true );
80
EnableWatchers( false );
83
private void EnableWatchers( bool enable )
85
if (fileWatchers != null)
86
foreach( FileSystemWatcher watcher in fileWatchers )
87
watcher.EnableRaisingEvents = enable;
90
public void FreeResources()
92
log.Info("FreeResources");
96
if (fileWatchers != null)
98
foreach (FileSystemWatcher watcher in fileWatchers)
102
watcher.Changed -= new FileSystemEventHandler(OnChanged);
118
public event AssemblyChangedHandler AssemblyChanged;
120
protected void OnTimer(Object source, ElapsedEventArgs e)
124
log.Info("Timer expired");
130
protected void OnChanged(object source, FileSystemEventArgs e)
132
log.Info("File {0} changed", e.Name);
134
changedAssemblyPath = e.FullPath;
141
log.Info("Setting timer");
151
protected void PublishEvent()
153
if (AssemblyChanged != null)
155
log.Debug("Publishing Event to {0} listeners", AssemblyChanged.GetInvocationList().Length);
156
AssemblyChanged(changedAssemblyPath);
b'\\ No newline at end of file'