139 lines
3.2 KiB
C#
139 lines
3.2 KiB
C#
using System;
|
|
using System.IO;
|
|
|
|
using sscs.common;
|
|
|
|
namespace sscs.cache
|
|
{
|
|
/// <summary>
|
|
/// Summary description for MPFileWatcher.
|
|
/// </summary>
|
|
public class MPFileWatcher
|
|
{
|
|
FileSystemWatcher fwatcher;
|
|
private string m_dir = null;
|
|
private string m_filename = null;
|
|
private byte[] m_baMP = new byte[32];
|
|
private byte[] m_baMPIV = new byte[32];
|
|
private bool m_bIgnoreFileDeletes = false;
|
|
|
|
public MPFileWatcher(string MPFilePath, string MPFileName)
|
|
{
|
|
m_dir = MPFilePath;
|
|
m_filename = MPFileName;
|
|
|
|
if ((MPFilePath != null) && (MPFileName != null))
|
|
{
|
|
LogMessage("Starting MPFile watcher on " + MPFilePath + "/" + MPFileName.Substring(1));
|
|
fwatcher = new FileSystemWatcher(MPFilePath);
|
|
fwatcher.Filter = MPFileName.Substring(1)+"*";
|
|
fwatcher.Deleted += new FileSystemEventHandler(fwatcher_Deleted);
|
|
fwatcher.Renamed += new RenamedEventHandler(fwatcher_Renamed);
|
|
fwatcher.Changed += new FileSystemEventHandler(fwatcher_Changed);
|
|
fwatcher.EnableRaisingEvents = true;
|
|
}
|
|
|
|
if (File.Exists(MPFilePath + MPFileName))
|
|
{
|
|
LoadAndCacheMPFiles();
|
|
}
|
|
}
|
|
|
|
~MPFileWatcher()
|
|
{
|
|
if (fwatcher != null)
|
|
fwatcher.EnableRaisingEvents = false;
|
|
fwatcher = null;
|
|
}
|
|
internal void pauseWatcher()
|
|
{
|
|
m_bIgnoreFileDeletes = true;
|
|
}
|
|
|
|
internal void resumeWatcher()
|
|
{
|
|
m_bIgnoreFileDeletes = false;
|
|
}
|
|
|
|
private void fwatcher_Deleted(object sender, FileSystemEventArgs e)
|
|
{
|
|
if (!m_bIgnoreFileDeletes)
|
|
{
|
|
LogMessage("MP file deleted");
|
|
ReWriteFiles();
|
|
}
|
|
}
|
|
|
|
private void fwatcher_Changed(object sender, FileSystemEventArgs e)
|
|
{
|
|
LogMessage("MP file Changed");
|
|
LoadAndCacheMPFiles();
|
|
}
|
|
|
|
private void fwatcher_Renamed(object sender, RenamedEventArgs e)
|
|
{
|
|
LogMessage("MP file renamed");
|
|
fwatcher_Deleted(sender, e);
|
|
}
|
|
|
|
private void LoadAndCacheMPFiles()
|
|
{
|
|
LogMessage("Loading and caching MP files");
|
|
|
|
try
|
|
{
|
|
FileStream fs = new FileStream(m_dir + m_filename, FileMode.Open);
|
|
fs.Read(m_baMP, 0, m_baMP.Length);
|
|
fs.Flush();
|
|
fs.Close();
|
|
|
|
fs = new FileStream(m_dir + m_filename + ".IV", FileMode.Open);
|
|
fs.Read(m_baMPIV, 0, m_baMPIV.Length);
|
|
fs.Flush();
|
|
fs.Close();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
LogMessage(e.ToString());
|
|
}
|
|
}
|
|
|
|
private void ReWriteFiles()
|
|
{
|
|
try
|
|
{
|
|
FileStream fs = new FileStream(m_dir + m_filename, FileMode.Create);
|
|
fs.Write(m_baMP, 0, m_baMP.Length);
|
|
fs.Flush();
|
|
fs.Close();
|
|
|
|
File.SetAttributes(m_dir + m_filename, FileAttributes.Hidden);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
LogMessage(e.ToString());
|
|
}
|
|
|
|
try
|
|
{
|
|
FileStream fs = new FileStream(m_dir + m_filename + ".IV", FileMode.Create);
|
|
fs.Write(m_baMPIV, 0, m_baMPIV.Length);
|
|
fs.Flush();
|
|
fs.Close();
|
|
|
|
File.SetAttributes(m_dir + m_filename + ".IV", FileAttributes.Hidden);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
LogMessage(e.ToString());
|
|
}
|
|
}
|
|
|
|
private void LogMessage(string message)
|
|
{
|
|
// Console.WriteLine(message);
|
|
CSSSLogger.DbgLog("MPFileWatcher:" + message);
|
|
}
|
|
}
|
|
}
|